存疑575B(已解決)多組資料無限輸入&&數字和字元混合處理
阿新 • • 發佈:2021-02-07
問題連結:https://paste.ubuntu.com/p/RqRGzSc2GP/
題目描述
給定兩個整數A和B,其表示形式是:從個位開始,每三位數用逗號","隔開。
現在請計算A+B的結果,並以正常形式輸出。
輸入
輸入包含多組資料資料,每組資料佔一行,由兩個整數A和B組成(-10^9 < A,B < 10^9)。
輸出
請計算A+B的結果,並以正常形式輸出,每組資料佔一行。
樣例輸入 Copy
-234,567,890 123,456,789
1,234 2,345,678
樣例輸出 Copy
-111111101
2346912
正確:轉自memcpy0;
#include <cstdio>
#include <cstring>
long long to_int(char s[]) {
int len = strlen(s);
long long r = 0;
int positive = 1;
for (int i = 0; i < len; i++) { //','就直接跳過
if (s[i] <= '9' && s[i] >= '0') {
r = r * 10 + (s[i] - '0');
} else if (s[i] == '-')
positive = 0;
}
if (!positive) r = -r;
return r;
}
int main()
{
char s[50], r[50];
while (scanf("%s %s", s, r) != EOF) {
long long snum, rnum;
snum = to_int(s);
rnum = to_int(r);
printf("%lld\n", snum + rnum);
}
return 0;
}
我的:答案錯誤。
#include<stdio.h>
#include<string.h>
long long to_int(char str[]){
long long x=0;
int i,len=strlen(str);
int positive=1;
for(i=0;i<len;i++){
if(str[i]>='0'&&(str[i]<='9')){
x=x*10+(str[i]-'0');
}else if(str[i]=='-') positive=0;
}
if(!positive) x=x*(-1);
return x;
}
int main(){
long long snum[100]={},rnum[100]={},i=0,j=0;
char str1[50]={},str2[50]={};
while(scanf("%s %s",str1,str2)!=EOF){
snum[i++]=to_int(str1);
rnum[i++]=to_int(str2);
}
for(;j<i;j++){
printf("%lld\n",snum[i]+rnum[i]);
}
return 0;
}
綜上:已學到字串轉為數字,‘9’轉為數字9的方法,以及longlong型範圍。
但為什麼我的仍舊輸入結束不了呢?
問題出在:
while(scanf("%s %s",str1,str2)!=EOF){
snum[i]=to_int(str1);
rnum[i++]=to_int(str2);
}
我原來snum,rnum是i,j兩個變數自增。後來全都改成i了,所以i自增了兩次,相當於snum存的02468號,rnum存的13579號,所以兩個陣列出現了問題。
但問題的表現竟然是不輸出結果,奇怪。