面试题是我找的,代码也看了,但是代码我自己写的!!!
//大数相加,相减 相除 相乘
#include <iostream>
using namespace std;
//此转换只是在特定条件下的 int类型只有0-9
inline int num(char s){return s-'0';}//char转换成int
inline char ch(int num){return num+'0';}//int转换成char
char * add(char a[],char b[]);
char c[100] ={'0'};
void main()
{
char a[100] ={'0'} ; //保存第一个数
char b[100] = {'0'}; //保存第二个数
while(1){
memset(a,'\0',100);
memset(b,'\0',100);
//i=1,j=1,保留符号位+和-
int i=1,j=1;
cout<<" 根据提示输入整数,输入非数字程序将会中止退出! "<<endl;
cout<<"请输入第一个数字:";
//获取符号位
a[0]=getchar();
if(a[0] > '9'&&a[0] < '0'&&a[0] != '-'&&a[0] != '+')continue;
else if(a[0] == '-')a[0] ='-';
else if ( a[0]>='0' && a[0]<='9')
{a[1] =a[0];a[0] = '+';i++;}
while ( (a[i]=getchar()) !='\n' )
{
if ( a[i]>'9' && a[i]<'0')break;
else{
i++;
}
}
a[i]='\0';
cout<<"请输入第二个数字:";
//获取符号位
b[0]=getchar();
if(b[0] > '9'&&b[0] < '0'&&b[0] != '-'&&b[0] != '+')continue;
else if(b[0] == '-')b[0] ='-';
else if ( b[0]>='0' && b[0]<='9')
{b[1] =b[0];b[0] = '+';j++;}
while ( (b[j]=getchar()) !='\n' )
{
if ( b[j]>'9' && b[j]<'0')break;
else{
j++;
}
}
b[j]='\0';
cout<<a;
cout<<b<<endl;
cout<<add(a,b)<<endl;
}
system("pause");
}
char * add(char a[],char b[])
{
int l =strlen(a)-1;
int r =strlen(b)-1;
int result;
int overflow =0;
if(l>=r)
{
for(int i=l;i>0;i--)
{
if(i>l-r){
result =(num(a[i])+num(b[i-l+r])+overflow)%10;
overflow =(num(a[i])+num(b[i-l+r])+overflow)/10;
a[i] = ch(result);
}
else{
result =(num(a[i])+overflow)%10;
overflow =(num(a[i])+overflow)/10;
a[i] = ch(result);
if(i==1&&overflow!=0)
{
memset(c,'\0',100);
c[0] =a[0];
c[1] =ch(overflow);
for(int s =1;s<=l;s++)
c[s+1]=a[s];
return c;
}
}
}
return a;
}else
{
for(int i=r;i>0;i--)
{
if(i>r-l){
result =(num(b[i])+num(a[i-r+l])+overflow)%10;
overflow =(num(b[i])+num(a[i-r+l])+overflow)/10;
b[i] = ch(result);
}
else{
result =(num(b[i])+overflow)%10;
overflow =(num(b[i])+overflow)/10;
b[i] = ch(result);
if(i==1&&overflow!=0)
{
memset(c,'\0',100);
c[0] =b[0];
c[1] =ch(overflow);
for(int s =1;s<=l;s++)
c[s+1]=b[s];
return c;
}
}
}
return b;
}
}