大哥大姐,帮我看一下吧,谢谢!
实验题目:字符串应用(大整数加法)字符串应用实验内容:输入两个大整数(大于100位),求它们之和。
实验类型:综合性
实验目的:
(1)掌握字符串的表示方法;
(2)掌握字符串常用处理方法;
(3)掌握字符串标准库函数的使用方法;
实验指导(算法框架):
主函数框架:
1. 定义合适的字符数组n1,n2,result
2. 输入两个表示大整数的字符串n1,n2
3. 获取n1,n2的长度len1,len2
4. If( len1 <= len2 ) //加数长度大于被加数长度
被加数向右移空出高位补’0’(函数RightMoving实现)
Else
加数向右移空出高位补’0’ (函数RightMoving实现)
5. 求n1,n2的和放入result(函数LargerIntegerAdd实现)
6. 输出字符串result的值(即求和的结果)
函数void RightMoving(char *s,int n)框架
1. 将s中的所有字符向右移动n个字符位置(空出前n个位置)
2. 将s的前n个位置填充字符’0’
函数int LargerIntegerAdd(char *result,char *n1,char *n2)框架
1. 求出result数据的最后位置(比n1或n2大1)
2. 置result的结尾符号’\0’
3. 从result的最低位开始直到次高位为止
计算当前位置的数字
计算当前位置向高位的进位值
4. 置result的最高位数字
5. 判断最高位数字是’0’还是’1’并将判断结果返回(用于确定输出时是否输出表示最高位数字的字符)
#include<stdio.h>
#include<string.h>
void RightMoving(int len2,int len1,int n,char*n1);
void main()
{
char n1[500],n2[500];
int len1,len2,x,y;
printf("输入两个大整数\n");
gets(n1);
gets(n2);
len1=strlen(n1);
len2=strlen(n2);
if(len1<=len2)
{
x=len2-len1;
RightMoving(len2,len1,x,n1);
puts(n1);
}
else
{
y=len1-len2;
RightMoving(len1,len2,y,n2);
puts(n2);
}
int w,q,nu1,nu2,sum,b,a;
char result[800];
w=strlen(n1);
q=w;
while(w>=1)
{
nu1=n1[w-1]-'0';
nu2=n2[w-1]-'0';
sum=nu1+nu2+b;
if(sum<10)
{
result[w]=sum+'0';
b=0;
}
else
{
a=sum%10;
result[w]=a+'0';
b=sum/10;
}
w--;
}
result[w+1]='\0';
puts(result);
}
void RightMoving(int len2, int len1, int n,char*n1)
{
n=len2-len1;
while(len1>=1)
{
n1[len2-1]=n1[len1-1];
len2--;
len1--;
}
while(n>=0)
{
n1[n]='0';
n--;
}
}