1.加法:倒置相加再还原(char和string)
#include<stdio.h>
#include<string.h>
void add(char a[],char b[])
{
int i,la,lb,max;
int na[100]={0},nb[100]={0};
la = strlen(a);
lb = strlen(b);
for(i = 0; i < la; i ++)
na[la-1-i] = a[i] - '0';
for(i = 0; i < lb; i ++)
nb[lb-1-i] = b[i] - '0';
max = la > lb ? la : lb;
//加法核心
for(i = 0; i < max; i ++)
{
na[i] += nb[i];
na[i+1] += na[i]/10;
na[i] %= 10;
}
if(na[max])
max ++;
for(i = max-1; i >= 0; i --)
printf("%d",na[i]);
return ;
}
int main()
{
char s1[100],s2[100];
while(scanf("%s %s",s1,s2) != EOF)
{
add(s1,s2);
printf("\n");
}
return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int L = 110;
string add(string a,string b)//只限两个非负整数相加
{
string ans;
int i;
int na[L] = {0},nb[L] = {0};
int la = a.size(),lb = b.size();
for(i = 0; i < la; i ++)
na[la-1-i] = a[i]-'0';
for(i = 0; i < lb; i ++)
nb[lb-1-i] = b[i]-'0';
int lmax = la > lb ? la : lb;
for(i = 0; i < lmax; i ++)
{
na[i]+=nb[i];
na[i+1]+=na[i]/10;
na[i]%=10;
}
if(na[lmax])
lmax ++;
for(i = lmax - 1; i >= 0; i --)
ans += na[i] + '0';
return ans;
}
int main()
{
string a,b;
while(cin>>a>>b)
cout<<add(a,b)<<endl;
return 0;
}
2.减法:倒置相减再还原
#include<stdio.h>
#include<string.h>
void add(char a[],char b[])
{
int i,la,lb,max;
int na[100]={0},nb[100]={0};
la = strlen(a);
lb = strlen(b);
for(i = 0; i < la; i ++)
na[la-1-i] = a[i] - '0';
for(i = 0; i < lb; i ++)
nb[lb-1-i] = b[i] - '0';
max = la > lb ? la : lb;
//减法核心
for(i = 0; i < max; i ++)
{
na[i] -= nb[i];
if(na[i] < 0)
{
na[i] += 10;
na[i+1] --;
}
}
while(!na[--max] && max > 0);
max ++;
for(i = max-1; i >= 0; i --)
printf("%d",na[i]);
return ;
}
int main()
{
char s1[100],s2[100];
while(scanf("%s %s",s1,s2) != EOF)
{
add(s1,s2);
printf("\n");
}
return 0;
}