晨跑锻炼C语言程序设计,继续贴C语言编程题

满意答案

再对了...设定了20000位,应该够了,好麻烦..

#include

#include

#include

int m[20000] = {0};

int digit = 1;

int *result(int *a,int n);

void num(int n);

int main()

{

char a[1000] = {'\0'}, *p;

int s[50000], i, j = 0;

scanf("%s", a);

int size = (int)strlen(a);

while(1)

{

for(i = 0; i < size ; i++)

{

if(a[i] <= '1')

{

if(i == (size-1))

{

s[j] = int(a[i] - '0') % 2;

a[i] = '0';

j++;

break;

}

else

{

a[i+1] += ((a[i] - '0') % 2) * 10;

a[i] = '0';

continue;

}

}

if(i == (size-1))

{

s[j] = int(a[i] - '0') % 2;

j++;

a[i] = (int(a[i] - '0') / 2 + '0');

continue;

}

a[i+1] += ((a[i] - '0') % 2) * 10;

a[i] = ((a[i] -'0')/2 + '0');

}

a[size] = '\0';

p = a;

while(*p != '\0')

{

if( *p != '0')

break;

p++;

}

if( *p == '\0')

break;

}

for(int k = j - 1,f = 0; k >= 0; k--,f++)

{

if(s[k] != 0)

{

num(f);

}

}

for(i = digit - 1; i >= 0; i--)

printf("%d", m[i]);

printf("\n");

return 0;

}

int *result(int *a,int n)

{

int carry;

int i, k;

a[0] = 1;

int temp;

digit = 1;

for(i = 2,k = 1; k <= n; ++k)

{

carry = 0;

for(int j = 1; j <= digit; ++j)

{

temp = a[j-1] * i + carry;

a[j-1] = temp % 10;

carry = temp / 10;

}

while(carry)

{

a[++digit-1] = carry % 10;

carry /= 10;

}

}

return a;

}

void num(int n)

{

int *p;

p = new int[20000];

p = result(p,n);

for(int j = digit - 1; j>= 0; j--)

{

m[j] += p[j];

if((m[j] / 10) != 0)

{

m[j+1] += (m[j] / 10);

m[j] %= 10;

}

}

delete p;

}

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值