#include<string.h>
//翻转
void *reverse(char str[])
{
int len =strlen(str)
char*ps,*pe,tmp
ps=str,pe=str+len-1
for( ps<peps++,pe--)
{
tmp=*ps
*ps=*pe
*pe=tmp//need *
}
return str//dont't forget return str
}
//相加,并ascii码变为相应的数字
void add(char a[],char b[])
{
char *pl,*ps
int i,la,lb,len
la=strlen(a)
lb=strlen(b)
(la>lb)?(pl=a,ps=b,len=lb):(pl=b,ps=a,len=la)
for(i=0 i<len i++)
{
pl[i] += ps[i]-96//96=2*'0'
//don't need *
}
len = (la>lb)?la:lb
for( i<leni++)
{
pl[i] -= 48//don't need *
}
for(i=0 i<len i++)
{
if(pl[i] >9)
{
pl[i+1]++
pl[i] %= 10
}
}
if(pl[len] != 0)
{
printf("%d",pl[len])
}
for(i=len-1 i>=0 i--)
{
printf("%d",pl[i])
}
}
int main()
{
char a[200],b[200]
scanf("%s%s",a,b)
add(reverse(a),reverse(b))
return 0
}
//把各位的数码存入字符数组中,注意ASCAII码的转换#include<stdio.h>
#include<string.h>
#include <conio.h>
int main()
{
int s,t,i,len1,len2
char s1[30],s2[30],n1[30],n2[30],sum[31]
//将字符串以数码形式按倒序存储于新字符串中,便于计算
printf("input 2 num(小于10^40):\n")
scanf("%s%s",&s1,&s2)
len1=strlen(s1)
len2=strlen(s2)
t=0
for(i=len1i>=0i--)n1[t++]=s1[i-1]-48
t=0
for(i=len2i>=0i--)n2[t++]=s2[i-1]-48
//高位补0
if(len1>len2)
{
n1[len1]=0
for(i=len2i<len1i++)n2[i]=0
}
if(len1<len2)
{
n2[len2]=0
for(i=len1i<len2i++)n1[i]=0
}
//计算
t=0
s=0
for(i=0i<(len1>len2?len1:len2)i++)
{
s=n1[i]+n2[i]+t//s为数码之和
sum[i]=s%10 //sum[i]为该位上的数码
t=s/10//t为进位
s=0
}
//输出
putchar(10)
if(t>0)
{
sum[i]=t
for(s=is>=0s--)printf("%c",sum[s]+48)
}
else
{
for(s=i-1s>=0s--)printf("%c",sum[s]+48)
}
getch()
}
#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 = len1>len2?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 = 0i <leni++)
{
num1[i] = i<len1 ? arr[len1-i-1]-'0':0
}
for (j = 0j <lenj++)
{
num2[j] = j<len2 ? brr[len2-j-1]-'0':0
}
//int sum[len]//定义和数组
int* sum = (int*)malloc(len*sizeof(int))
int flag=0//设进位符
for (i = 0i <leni++)
{
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 = 0i <leni++)
{
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。