1. 程式人生 > 其它 >存疑575B(已解決)多組資料無限輸入&&數字和字元混合處理

存疑575B(已解決)多組資料無限輸入&&數字和字元混合處理

技術標籤:演算法筆記字串

問題連結: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號,所以兩個陣列出現了問題。
但問題的表現竟然是不輸出結果,奇怪。