题意:给定4321 5678,结果再反转(1234+8756)
一开始以为是poj1503一样,就稀里糊涂的敲代码,实际上有不同
如题:先求1234
+ 8765
----------------------
这样就相似poj1503
4 | 3 | 2 | 1 |
5 | 6 | 7 | 8 |
不过在str串与fin相加时,就按给定的顺序加就行
for(i=0,j=0;i<=len-1;i++,j++)
总结:得到的结果还要反转,假设不反转应该是从右往左输出,结果是忽略前导0(从左往右)输出
分别找出都不为0的下标
int left=0,right=103; while(1) { if(fin[right]==0) right--; else break; } while(1) { if(fin[left]==0) left++; else break; }
最后输出
技巧:输入格式1234 4567
只用一个串,重复用两次就行,scanf遇到空格结束,相当于第一次进while(t)循环,就只读到了一个数串
#include <stdio.h> #include <stdlib.h> #include<string.h> int main() { int n,i,j,len,temp; char str[100]; int fin[104]; scanf("%d",&n); while(n--) { memset(fin,0,sizeof(fin)); int t=2; while(t--){ scanf("%s",str); len=strlen(str); temp=0; for(i=0,j=0;i<=len-1;i++,j++) { int c; c=fin[j]+temp+str[i]-'0'; fin[j]=c%10; temp=c/10; } while(temp>0) { int c; c=temp+fin[j]; fin[j]=c%10; temp=c/10; j++; } } int left=0,right=103; while(1) { if(fin[right]==0) right--; else break; } while(1) { if(fin[left]==0) left++; else break; } for(i=left;i<=right;i++) { printf("%d",fin[i]); } printf(" "); } return 0; }