#include
#include
#include
void RightMoving(char *s,int n)
{
char *p=s,*q;
while(*p++!='\0');
for(q=p;q!=s;q--)
*(q-1+n) = *(q-1);
for(int i=0;i}
int LargerIntegerAdd(char *result,char *n1,char *n2)
{
int i,t=0,num;
num = strlen(n1)>strlen(n2)?strlen(n1):strlen(n2);
result[num]='\0';
for(i=num-1;i>-1;i--)
{
result[i] = (n1[i] + n2[i] + t - '0');
t=0;
if(result[i]>'9')
{
t++;
result[i] -= 10;
}
}
return t;
}
int main()
{
int i;
char n1[200],n2[200],result[200];
gets(n1);
gets(n2);
printf("%s+%s=",n1,n2);
if(strlen(n1)>strlen(n2))
RightMoving(n2,strlen(n1)-strlen(n2));
if(strlen(n1)RightMoving(n1,strlen(n2)-strlen(n1));
i = LargerIntegerAdd(result,n1,n2);
if(i>0)
printf("%d",i);
puts(result);
return 0;
}
你刚提问就在敲……其中不小心多加了1搞的调试到现在,终于好了!
/*
n1 = 33685402985412, n2 = 12340
result = 33685402997752
Press any key to continue
*/
#include
#include
#define MAXLEN 120
void RightMoving(char *s,int n) {
int i,len = strlen(s);
for(i = len; i >= 0; --i) s[i + n] = s[i];
for(i = 0; i < n; ++i) s[i] = '0';
}
void LargerIntegerAdd(char *result,char *n1,char *n2) {
int i,num,c = 0,len;
int len1 = strlen(n1);
int len2 = strlen(n2);
if(len1 > len2) {
RightMoving(n2,len1 - len2);
len = len1;
}
else {
RightMoving(n1,len2 - len1);
len = len2;
}
for(i = len - 1; i >= 0; --i) {
num = n1[i] - '0' + n2[i] - '0' + c;
result[i] = num%10 + '0';
c = num/10;
}
if(c) {
RightMoving(result,1);
result[0] = c + '0';
}
result[len] = '\0';
}
int main() {
char n1[MAXLEN] = "33685402985412";
char n2[MAXLEN] = "12340";
char result[MAXLEN];
printf("n1 = %s, n2 = %s\n",n1,n2);
LargerIntegerAdd(result,n1,n2);
// printf("n1 = %s, n2 = %s\n",n1,n2);
printf("result = %s\n",result);
return 0;
}
#include
void RightMoving(char *s, int n)
{
int len=strlen(s);
int i;
for(i=len-1;i>=0;i--)
s[i+n]=s[i];
for(i=0;is[i]='0';
s[len+n]='\0';
}
int LargeIntegerAdd(char *result,char *n1,char *n2)
{
int i,j,up,r;
int len=strlen(n1);
for(i=0;i<=len+1;i++)
result[i]=0;
for(i=len-1;i>=0;i--)
{
r=result[i+1]+n1[i]+n2[i]-2*'0';
result[i+1]=r%10+'0';
result[i]+=r/10;
}
result[0]+='0';
if(result[0]=='0')
return 0;
else
return 1;
}
int main()
{
char n1[200],n2[200],result[200];
int len1,len2;
int r;
gets(n1);
gets(n2);
len1=strlen(n1);
len2=strlen(n2);
if(len1RightMoving(n1,len2-len1);
else if(len2RightMoving(n2,len1-len2);
r=LargeIntegerAdd(result,n1,n2);
if(r==1)
printf("%s\n",result);
else
printf("%s\n",result+1);
}
稍后给你发私信。
楼上写了,不发了。
用位来实现的吗???