满意答案
简单的两数相加肯定不行,必须用字符串。下面是我上学的时候编的,不知道能不能用,你看看。
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "windows.h"
#include
//检查合法性
int check(char *a)
{
for(int i=0;i
if(a[i]-'0'<0||a[i]-'0'>9)
return 0;
return 1;
}
//格式化字符串
void format(char *a,char *b)
{
int i;
int maxlen=0,minlen=0,lena=0,lenb=0;
maxlen=strlen(a)>strlen(b)?strlen(a):strlen(b);
minlen=strlen(a)
lena=strlen(a);
lenb=strlen(b);
for(i=lena-1;i>=0;i--)
{
a[i+maxlen-lena+1]='0'; //初始化
a[i+maxlen-lena+1]=a[i];
}
for(i=0;i<=maxlen-lena;i++)
a[i]='0';
a[maxlen+1]='\0';
for(i=lenb-1;i>=0;i--)
{
b[i+maxlen-lenb+1]='0'; //初始化
b[i+maxlen-lenb+1]=b[i];
}
for(i=0;i<=maxlen-lenb;i++)
b[i]='0';
b[maxlen+1]='\0';
}
//加法
void add(char *a,char *b)
{
int c=0;
int d=0;
int pw=0;
int i=0;
int len=0;
format(a,b);
len=strlen(a);
char buffer[255]={"0"};
for(i=len-1;i>=0;i--)
{
c=a[i]-'0'+b[i]-'0';
d=c%10;
pw=c/10;
a[i-1]=a[i-1]+pw;
buffer[i]=d+'0';
}
buffer[len]='\0';
if(buffer[0]=='0')
printf("%s\n",buffer+1);
else
printf("%s\n",buffer);
}
//减法
void sub(char *a,char *b)
{
int i=0;
int abigger=0;
int bbigger=0;
format(a,b);
for(i=0;i
{
if(a[i]>b[i])
{ abigger=1;break;}
else if(a[i]
{ bbigger=1;break;}
}
if(i==strlen(a))
{
printf("0");
return;
}
}
//主函数
int main(int argc, char* argv[])
{
char num1[256],num2[256];
char select;
loop:
printf("请输入数字:\n");
gets(num2);
gets(num1);
if(check(num1)==0||check(num2)==0)
{
printf("非法数字!!请检查输入!!!\n");
return 0;
}
printf("请选择运算:1:加法 2:减法 3:乘法 4:除法\n");
select=getchar();
switch(select)
{
case '1':
add(num1,num2);goto loop;break;
case '2':
sub(num1,num2);goto loop;break;
}
}
00分享举报