Description
Calculate A-B
Input
Two integer a and b(-10^100 < a,b < 10^100)
Output
Output a-b
Sample Input
1 2
Sample Output
-1
我的程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char a[150],b[150],c[150]={'\0'};
int i,j,k,m,n;
scanf("%s %s",&a,&b);
i=strlen(a);
j=strlen(b);
m=1;n=-1;/*n用来判断是正是负*/
if ((a[0]=='-'&&b[0]=='-')||(a[0]!='-'&&b[0]!='-'))/*做减法*/
{
if (a[0]=='-'&&b[0]=='-')
{
a[0]='0';
b[0]='0';
n=n*(-1);
}
if (j>i) m=0;
if (i==j)
for(k=0;k<i;k++)
if (b[k]>a[k]) m=0;
if (m==1)
for (k=i-1;k>=0;k--)
{
if (j>0)
{
if (a[k]>=b[j-1]) c[k]=a[k]-b[j-1]+48;
else
{
c[k]=a[k]-b[j-1]+10+48;
a[k-1]--;
}
}
else
c[k]=a[k];
j--;
}
else
{
for (k=j-1;k>=0;k--)
{
if (i>0)
{
if (b[k]>=a[i-1]) c[k]=b[k]-a[i-1]+48;
else
{
c[k]=b[k]-a[i-1]+10+48;
b[k-1]--;
}
}
else
c[k]=b[k];
i--;
}
n=n*(-1);
}
}
else
{ /*a负b正,a正b负其实是做加法*/
if(a[0]=='-'&&b[0]!='-') {n=n*(-1);k=i-1;a[0]=0;if (j>k) k=j;}
else {k=j-1;b[0]=0;if (i>k) k=i;}
while((i>0)||(j>0))
{
if (i<=0) c[k]=b[j-1]+c[k];
else if(j<=0) c[k]=a[i-1]+c[k];
else c[k]=c[k]+a[i-1]+b[j-1]-48;
if ((c[k]-48)>=10)
{
c[k-1]=c[k-1]+1;
c[k]=c[k]-10;
}
i--;k--;j--;
}
if (c[0]<'0'&&c[0]>=0) c[0]=c[0]+48;
}
if (n==1) printf("%c",'-');
k=0;
while (c[k]=='0') k++;
while (c[k]!='\0')
{
printf("%c",c[k]);
k++;
}
system("pause");
return 0;
}
不好意思……因为心情烦躁实在是写不出过多的注释了……将就一下吧……求大牛看看……实在看不下去就给我一个正确的也行……能让我懂了我就给分……谢谢谢谢谢谢~
分数 好说……至于究竟是因为分数太低还是自己没水平所以没有正面回答而是自作聪明的讲些基本原理……我就不说了……上面这个程序我自己已经改进过了一些……可惜还是没有通过……愿意帮忙的大牛联系我……