重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h#include string.h#define MAXLEN 1000void longadd(char* s1,char* s2 ,int* s3)
目前创新互联已为成百上千的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、铁岭县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
{ int arr1[MAXLEN]; int arr2[MAXLEN]; int arr3[MAXLEN]; int i; //求字符串长度 倒序放在int 数组里面
int len1 = strlen(s1); for( i = 0; i len1; i++)
{
arr1[i] = s1[len1-1-i] - '0';
} //求字符串长度 倒序放在int 数组里面
int len2 = strlen(s2); for( i = 0; i len2; i++)
{
arr2[i] = s2[len2-1-i] - '0';
} //加法运算
for( i = 0; i MAXLEN; i++)
{
arr3[i] = arr1[i] + arr2[i];
} //数据处理 超过9的 进行取余 并且进位
for( i = 0; i MAXLEN; i++)
{ if(arr3[i] = 10)
{
arr3[i+1] += arr3[i] / 10;
arr3[i] = arr3[i] % 10;
}
s3[i] = arr3[i];
} return;
}int main(int argc, char const *argv[])
{ char buff1[MAXLEN]; char buff2[MAXLEN]; int arr[MAXLEN]; puts("input 1:");
gets(buff1); puts("input 2:");
gets(buff2);
longadd(buff1,buff2,arr); //通过z变量的值过滤前面的0 倒序输出
int z = 0; for(int j =MAXLEN -1 ; j = 0 ; j-- )
{ if(z == 0)
{ if(arr[j] != 0)
{ printf("%d",arr[j]);
z= 1;
}
} else
{ printf("%d",arr[j]);
}
} //如果z值没有改变 则输出0
if( z== 0)
{ printf("0\n");
} return 0;
}
#include string.h
#include stdio.h
#include stdlib.h
#define N 100
int main(int argc, char const *argv[])
{
char arr[N] = {};
gets(arr);
char brr[N] = {};
gets(brr);
int len1,len2,i = 0,j = 0;
len1 = strlen(arr);
len2 = strlen(brr);
int len = len1len2?len1:len2;
/* c99之后数组初始化支持整型表达式,称为可变长数组,但按照c89的标准是不对的
int num1[len]; //将字符串转换成翻转的整型数组
int num2[len];
*/
int* num1 = (int*)malloc(len*sizeof(int));
int* num2 = (int*)malloc(len*sizeof(int));
for (i = 0; i len; i++)
{
num1[i] = ilen1 ? arr[len1-i-1]-'0':0;
}
for (j = 0; j len; j++)
{
num2[j] = jlen2 ? brr[len2-j-1]-'0':0;
}
//int sum[len]; //定义和数组
int* sum = (int*)malloc(len*sizeof(int));
int flag=0; //设进位符
for (i = 0; i len; i++)
{
sum[len-1-i] = (num1[i]+num2[i]+flag)%10;
flag = (num1[i]+num2[i]+flag)/10;
}
if (flag == 1) printf("1"); //如果最高位有进位 则输出一个1
for (i = 0; i len; i++)
{
printf("%d",sum[i]);
}
printf("\n");
free(num1);
free(num2);
free(sum);
num1 = NULL;
num2 = NULL;
sum = NULL;
return 0;
}
扩展资料:
gets()函数用法
gets是从标准输入设备读字符串函数。
函数原型:char*gets(char*str);
功能为:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
注意:不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。使用时需要包含stdio.h头文件
参数
str为字符串指针,用来存放读取到的数据。
返回值
读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
#include "stdio.h"
int sum(int a[],int b[],int c[])
{
int i=0,j=0,f=0;
for(;i21;i++)
{
j=a[i]+b[i]+j;
if(j!=0) f=i;
c[i]=j%10000;
j=j/10000;
}
c[i]=j;
return f;
}
void get(int a[])
{
int n,i,j;
scanf("%d",n);
j=(n-1)/4;
switch (n%4)
{
case 3:scanf("%3d",a[j]);break;
case 2:scanf("%2d",a[j]);break;
case 1:scanf("%1d",a[j]);break;
case 0:scanf("%4d",a[j]);break;
}
for(i=j-1;i=0;i--)
scanf("%4d",a[i]);
}
void main()
{
static int a[20],b[20],c[21],i,n,f;
char d[80];
get(a);
get(b);
f=sum(a,b,c);
for(i=f;i=0;i--)
printf("%4d",c[i]);
}
以前我也做过一个大整数程序,2000!,不过那里面没有减法。做这个减法真让花时间啊。
#includestdio.h
#includestring.h
#includemath.h
#define MAX 4000/*数位上限*/
dd(char *a)
{
char t[MAX];
int i,j;
for(i=0;iMAX;i++)
{
if(a[i]==NULL)
{
for(j=0;i0;j++,i--)
{
t[j]=a[i-1];
}
strncpy(a,t,j);
break;
}
}
}
add1(char *a,char *b,int n,char *c)
{
int N;
if(*a!=NULL*b!=NULL)
N=*a-'0'+*b-'0'+n;
else if(*a==NULL*b!=NULL)
N=*b-'0'+n;
else if(*a!=NULL*b==NULL)
N=*a-'0'+n;
else
N=n;
*c=(N%10)+'0';
N=N/10;
if(*(a+1)!=NULL||*(b+1)!=NULL||N!=0)
{
add1(a+1,b+1,N,c+1);
}
}
addab(char *a,char *b,char *c)
{
dd(a);
dd(b);
dd(c);
add1(a,b,0,c);
dd(a);
dd(b);
dd(c);
}
d_(char *a)
{
int i;
for(i=0;a[i]!=NULL;i++)
{
a[i]=a[i+1];
}
}
udg1(char *a,char *b,int n,char *c)
{
int N;
if(*b==NULL)
{
N=*a-'0'-n;
n=0;
}
else
{
if(*a=(*b+n))
{
N=*a-*b-n;
n=0;
}
else
{
N=*a+10-*b-n;
n=1;
}
}
*c=N+'0';
if(*(a+1)!=NULL)
udg1(a+1,b+1,n,c+1);
}
udg(char *a,char *b,char *c)
{
int i;
if((strcmp(a,b)0strlen(a)==strlen(b))||strlen(a)strlen(b))
i=1;
else if((strcmp(a,b)0strlen(a)==strlen(b))||strlen(b)strlen(a))
i=-1;
else
i=0;
dd(a);
dd(b);
dd(c);
if(i==1)
udg1(a,b,0,c);
else if(i==-1)
{
udg1(b,a,0,c);
for(i=0;iMAX;i++)
{
if(c[i]==NULL)
{
c[i]='-';
break;
}
}
}
else
*c='0';
dd(a);
dd(b);
dd(c);
}
add_(char *c)
{
int i;
char t1,t2;
t1=c[0];
t2=c[1];
c[0]='-';
for(i=1;t1!='\0';i++)
{
c[i]=t1;
t1=t2;
t2=c[i+1];
}
}
main()
{
char a[MAX]={NULL},b[MAX]={NULL},c[MAX]={NULL};
printf("输入两个数:\n");
scanf("%s",a);
getchar();
scanf("%s",b);
getchar();
if(a[0]!='-'b[0]!='-')
{
addab(a,b,c);
}
else
{
if(a[0]=='-'b[0]!='-')
{
d_(a);
udg(b,a,c);
}
else if(a[0]!='-'b[0]=='-')
{
d_(b);
udg(a,b,c);
}
else
{
d_(b);
d_(a);
addab(a,b,c);
add_(c);
}
}
printf("%s\n",c);
getchar();
}