//加法
#include <stdio.h> #include <string.h> #define MAXN 200 int an1[MAXN+10]; int an2[MAXN+10]; char szLine1[MAXN+10]; char szLine2[MAXN+10]; int main() { scanf("%s",szLine1); scanf("%s",szLine2); int i,j; memset(an1,0,sizeof(an1)); memset(an2,0,sizeof(an2)); int nlen1 = strlen(szLine1); for(j=0,i=nlen1-1;i>=0;i--) an1[j++] = szLine1[i]-'0';//逆序整型数组 int nlen2 = strlen(szLine2); for(j=0,i=nlen2-1;i>=0;i--) an2[j++] = szLine2[i]-'0'; for(i=0;i<MAXN;i++) { an1[i]+=an2[i]; //逐位相加 if(an1[i]>=10) { //看是否进位 an1[i]-=10; an1[i+1]++;//进位 } } for(i=MAXN;(i>=0)&&(an1[i]==0);i--); if(i>=0) { for(;i>=0;i--) printf("%d",an1[i]); } else printf("0\n"); return 0; }
#include <stdio.h> #include <string.h> #define MAX_LEN 1000 int a[MAX_LEN+10],b[MAX_LEN+10],c[MAX_LEN*2+10]; char str1[MAX_LEN+10],str2[MAX_LEN+10]; int main() { scanf("%s",str1); scanf("%s",str2); int i,j; int len1,len2; len1 = strlen(str1); len2 = strlen(str2); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(j=0,i=len1-1;i>=0;i--)//倒转第一个整数 a[j++] = str1[i]-'0'; for(j=0,i=len2-1;i>=0;i--) b[j++] = str2[i]-'0'; for(i=0;i<len1;i++) //两数字相乘,每次一位 { for(j=0;j<len2;j++) c[i+j] += b[j]*a[i]; //先乘起来,后面统一处理进位 //一个数的第i位和另一个数的第j位相乘所得的数,是要累加到结果的第[i+j]位上的 } for (i = 0; i < MAX_LEN*2; i++) //统一处理进位循环问题 { if(c[i]>=10) { c[i+1]+=c[i]/10; //后一位加上进位 c[i]%=10; } } for(i=MAX_LEN*2;(c[i]==0)&&(i>=0);i--); //跳过高位的0 if(i>=0) for(;i>=0;i--) putchar('0'+c[i]); else printf("0"); return 0; }
原文地址:http://blog.csdn.net/huolang_vip/article/details/42879859