杭電 1002-大數相加
阿新 • • 發佈:2019-02-09
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1002
大數相加可以用字串的方法做,先將需要相加的大數倒過來,然後一一對應相加,如果 i 大於十,則向 i+1 加一,其實就與本來的兩數相加一樣,只不過大數相加是倒過來後在各位相加,最後再將結果倒過來
大數相減#include<iostream> #include<string> using namespace std; #define MAX_LEN 10001 int an1[MAX_LEN+10]; int an2[MAX_LEN+10]; char szLine1[MAX_LEN+10]; char szLine2[MAX_LEN+10]; int main() { int T,i,j,k,nLen1,nLen2,t=1; scanf("%d",&T); while(T--) { memset(an1,0,sizeof(an1)); memset(an2,0,sizeof(an2)); scanf("%s",szLine1); scanf("%s",szLine2); nLen1=strlen(szLine1); j=0; for(i=nLen1-1;i>=0;i--) an1[j++]=szLine1[i]-48; nLen2=strlen(szLine2); j=0; for(i=nLen2-1;i>=0;i--) an2[j++]=szLine2[i]-48; for(i=0;i<MAX_LEN;i++) { an1[i]+=an2[i]; if(an1[i]>=10) { an1[i]-=10; an1[i+1]++; } } printf("Case %d:\n%s + %s = ",t,szLine1,szLine2); k=0; for(i=MAX_LEN;i>=0;i--) { if(k) printf("%d",an1[i]); else if(an1[i]) { printf("%d",an1[i]); k=1; } } t++; if(T>0) printf("\n\n"); else printf("\n"); } return 0; }
#include<iostream> #include<string> using namespace std; #define MAX_LEN 10001 int an1[MAX_LEN]; int an2[MAX_LEN]; char szLine1[MAX_LEN]; char szLine2[MAX_LEN]; int sum[MAX_LEN]; int main() { int T,i,j,k,nLen1,nLen2,t=1; scanf("%d",&T); while(T--&& T!=0) { memset(an1,0,sizeof(an1)); memset(an2,0,sizeof(an2)); memset(sum,0,sizeof(sum)); scanf("%s",szLine1); scanf("%s",szLine2); nLen1=strlen(szLine1); j=0; for(i=nLen1-1;i>=0;i--) an1[j++]=szLine1[i]-'0'; nLen2=strlen(szLine2); j=0; for(i=nLen2-1;i>=0;i--) an2[j++]=szLine2[i]-'0'; for(i=0;i<MAX_LEN;i++) { if(an1[i]<an2[i]) { an1[i]+=10; an1[i+1]--; } sum[i]=an1[i]-an2[i]; } printf("Case %d:\n%s - %s = ",t,szLine1,szLine2); k=0; for(i=MAX_LEN;i>=0;i--) { if(k) printf("%d",sum[i]); else if(sum[i]) { printf("%d",sum[i]); k=1; } } t++; if(T>0) printf("\n\n"); else printf("\n"); } return 0; }