You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
python/C++专题课程/基础知识/求任意两整数之和(1000位以内.cpp

69 lines
1.2 KiB

#include<bits/stdc++.h>
using namespace std;
#define MAX 1000 /* precision */
void input(char ch[]) {
scanf("%s", ch);
}
void add(char ch1[], char ch2[], char ch3[]) {
int len1, len2, len3, maxlen;
int sum, flag;
len1=strlen(ch1);
len2=strlen(ch2);
len3=maxlen=len1 >= len2 ? len1 : len2;
flag=0; /* jin wei */
while(len1>=1 && len2>=1) {
sum=ch1[len1-1]-'0' + ch2[len2-1]-'0' + flag; /* char -> int to calculate sum */
flag=0;
if(sum>=10) {
sum-=10;
flag=1;
}
ch3[maxlen-1]=sum + '0';
len1--;
len2--;
maxlen--;
}
while(len1>=1) { /* if num1[] is longer or maxer */
sum=ch1[len1-1]-'0' + flag;
flag=0;
if(sum>=10) {
sum-=10;
flag=1;
}
ch3[maxlen-1]=sum + '0';
len1--;
maxlen--;
}
while(len2>=1) { /* if num2[] is longer or maxer */
sum=ch2[len2-1]-'0' + flag;
flag=0;
if(sum>=10) {
sum-=10;
flag=1;
}
ch3[maxlen-1]=sum + '0';
len2--;
maxlen--;
}
if(flag != 0) /* if flag, then print gaowei(jinwei) */
printf("%d", flag);
for(int i=0; i<len3; i++)
printf("%c", ch3[i]);
printf("\n");
}
int main() {
char ch1[MAX], ch2[MAX], ch3[MAX+1];
memset(ch3, '0', sizeof(ch3));
input(ch1);
input(ch2);
add(ch1, ch2, ch3);
return 0;
}