大数乘法求大神
#include <stdio.h>int main(void)
{
int i,j,k,l=1,m=10000;
int n;
int temp = 0;
int a = {1};
scanf("%d", &n);
for(i=1; i<=n; ++i)
{
temp=0,j=0;
while(1)
{
k = a;
a = (a*i%10 + temp)%10;
temp = (k*i + temp)/10; //这部分差个条件,不知道怎么写!
}
}
for(k=10000-1; k>=0; --k)
{
if(a!=0)
{
for(; k>=0; --k)
printf("%d", a);
printf("\n");
}
}
return 0;
}
整体的算式没有错,就差个结束算式的条件,想了半天都不知道要怎么写,求大神!!!!! 本帖最后由 fc1735 于 2017-2-3 11:47 编辑
学习电脑 发表于 2017-2-3 10:25
有没有看我问的是什么,我不是要这代码
抱歉最近也在玩答题网站,写完就直接复制过来了
你代码的思路也是可以的,我把条件补齐下
#include <stdio.h>
int main(void)
{
int i,j,k,l=1,m=10000;
int n;
int temp = 0;
int a = {1};
scanf("%d", &n);
for(i=1; i<=n; ++i)
{
temp=0,j=0;
while(1)
{
k = a;
a = (a*i%10 + temp)%10;//改成a=(a*i+temp)%10;
temp = (k*i + temp)/10; //这部分差个条件,不知道怎么写!
这边加上 if (++j==10000)break;
}
}
for(k=10000-1; k>=0; --k)
{
if(a!=0)
{
for(; k>=0; --k)
printf("%d", a);
printf("\n");
加上break;
}
}
return 0;
}
因为少了循环判断最高位的代码,从最低位开始做循环的话,就算碰到a和temp同时为零,也不能保证最高位是零,所以只能写成让 j=10000时退出循环
#include<stdio.h>
void Print_Factorial ( const int N )
{
int a={0},i,t;
int *d,*j,*s=&a;
*s=1;
if (N<0) {printf("Invalid input");return;}
for (i=1;i<=N;i++)
{
d=a;
t=0;
while(!*d)d++;
for (j=s;j>=d;j--)
{
*j=*j*i+t;
t=*j;
*j%=10;
t=(t-*j)/10;
}
while (t)
{
*j--=t%10;
t=(t-*j)/10;
}
}
d=a;
while (!*d)d++;
for (;d<=s;d++)printf("%d",*d);
}
int main()
{
int n;
scanf("%d",&n);
Print_Factorial (n);
return 0;
}
fc1735 发表于 2017-2-1 16:31
用数组,逢十进一 fc1735 发表于 2017-2-1 16:31
有没有看我问的是什么,我不是要这代码 lalan 发表于 2017-2-2 18:23
用数组,逢十进一
我也知道,你有没有看我问的是什么啊 学习电脑 发表于 2017-2-3 10:26
我也知道,你有没有看我问的是什么啊
你这个程序是不是在求大数的阶乘? fc1735 发表于 2017-2-3 11:42
抱歉最近也在玩答题网站,写完就直接复制过来了
你代码的思路也是可以的,我把条件补齐下
很好,其实其他地方不改都是对的,只加个循环退出条件就行了,我怎么就没想到呢,这能用这种最浪费是假你的办法了!试了好多次其他的都不行
页:
[1]