69,373
社区成员
发帖
与我相关
我的任务
分享
for(i = 0; i < MAX; i++)
{
a[i] += b[i];
if(a[i] >= 10)
{
a[i] -= 10;
a[i+1]++;
}
}
这里会出现越界。。。自己看看为什么。。for(i = MAX; i >= 0; i--)
{
if(statue)
{
printf("%d", a[i]);
}
else if(a[i])
{
printf("%d", a[i]);
statue = IN;
}
}
putchar('\n');
这里也会越界。。。因为你len为100 MAX也为100 a[MAX]表示的是a的第101个元素。。所以会有问题。。
#include <stdio.h>
int per[10000];
int total;
void fact(int number)
{
int i,j,temp,flag;
per[0] = 1;
total = 1;
for (i=1,flag=0;i<=number;i++)
{
for (j=0,temp=0;j<total;j++)
{
temp = per[j]*i+flag;
per[j] = temp%10;
flag = temp/10;
}
while (flag)
{
per[total++] = flag%10;
flag /= 10;
}
}
}
void main()
{
int i,number;
printf("Input number:");
scanf("%d",&number);
fact(number);
printf("%d!=",number);
for (i=total-1;i>=0;i--)
{
printf("%d",per[i]);
}
printf("\n%d\n",total);
}
statue = OUT;
for(i = MAX; i >= 0; i--)
{
if(statue) //statue不为0才打印
{
printf("%d", a[i]);
}
else if(a[i]) //a[i]不为0才设置statue=1,并开始打印
{
printf("%d", a[i]);
statue = IN;
}
//这里其实可以加个 else{} 好理解一点~ 也就是跳过后面a[i]等于0的情况,直到遇到a[i]不为0才开始打印
}
putchar('\n');
//相加
char* AddNum(char* a,char* b)
{
int maxlen = max(strlen(a),strlen(b));
//多申请两个字符,一个是结束符'\0',一个是放到第一个字符,当两个数最高位相加后,如果有进位,保存到这里
char* p = new char[maxlen+2];
//为最后一位写上结束符
*(p+maxlen+1)='\0';
//声明两个指针分别指向a和b的末尾,不包含结束符
char* pA=a+strlen(a)-1;
char* pB=b+strlen(b)-1;
int m=0;
int n=0;
//进位
int c=0;
for (int i=maxlen;i>0;i--)
{
m = n = 0;
//因为当pA到达第一个字符时,即pA=a时,也要进行计算,所以这里用(pA-1)来判断
//因为字符'0'的Asic是48,所以1就是49,要转成数字,就要减去48
if ((pA+1) != a)
{
m = *pA - 48;
pA--;
}
if ((pB+1) != b)
{
n = *pB - 48;
pB--;
}
//为p指针的第i个字符赋值
*(p+i) = (m+n+c) % 10 + 48;
//取得进位
c = (m+n+c) / 10;
}
*p = 48+c;
return p;
}