已掉线,重新登录

首页 > 绿虎论坛 > 杂类 > 超级灌水 (发帖)

标题: 苦思了下午还没解决的C问题!求解啊!!

作者: @Ta

时间: 2013-06-10

点击: 3878

<?php
/*问题是:输入N(2<N<2048),输入N!最右边的第一个非零的数字。例如,当N等于5时,输出2。下面是我写的:*/
#include "stdio.h"
main()
{    unsigned  int sum=1;
    int i,d,N;
    A: scanf("%d",&N);
    if(N>2&&N<2048){
        for(i=1;i<=N;i++)
        sum*=i;
        printf("%d\t",sum);//问题就在这,这时sum为那个阶乘。
        d=sum%10;//而取它最后一位后d成了0!!这是为什么啊~~
        while(d==0){
        sum=sum%10;
        d=sum%10;
        }
        printf("%d\n",d);
     }else{
     printf("输入数字不在0-2048之内,请重新输入!\n");
     goto A;
     }
     return 0;
}
?>
唔……上面的程序我改了下,现在输入5能输出2了,但是数字稍微大点就不行了,比如57

[隐藏样式|查看源码]


『回复列表(18|隐藏机器人聊天)』

1. 用go to 啊!
(/@Ta/2013-06-10 20:29//)

2. 楼主,真心没看懂,说下你要做什么,这个程序要实现什么事
(/@Ta/2013-06-10 20:31//)

3. 懂了……不过,你不觉得2048的阶乘,非常非常大吗?
(/@Ta/2013-06-10 20:32//)

4. @  一个题,在/*  */里,我想解决那个题,可是程序写出来有问题了
(/@Ta/2013-06-10 20:33//)

5. @   呃……在测试期间手机死机了一次~~~唉……这只是那个题的假设
(/@Ta/2013-06-10 20:35//)

6. goto那里有问题,不断循环,还要我按音量下+c
(/@Ta/2013-06-10 20:38//)

7. @终极神天
<?php
#include <stdio.h>
int main() { 
  long int sum=1; 
  int i,d,N; 
A:  scanf("%d",&N);

  if(N>2&&N<2048){ 
    for(i=1;i<=N;i++) sum*=i;  
      printf("%d\t",sum);
    d=sum%10;
   while(d==0){
   sum=sum/10;//这里是除号
   d=sum%10; }
   printf("%d\n",d);
 }else{
   printf("输入数字不在0-2048之内,请重新输入!\n"); 
goto A;
  } 
 return 0;
}
?>
(/@Ta/2013-06-10 20:43//)

8. 1 ! =1,
2 ! =2,
3 ! =6,
4 ! =24,
5!=120,
6!=720,
7!=5,040,
8!=40,320
9!=362,880
10!=3,628,800
11!=39,916,800
12!=479,001,600
13!=6,227,020,800
14!=87,178,291,200
15!=1,307,674,368,000
16!=20,922,789,888,000
17!=355,687,428,096,000
18!=6,402,373,705,728,000
19!=121,645,100,408,832,000
20!=2,432,902,008,176,640,000
(/@Ta/2013-06-10 23:06//)

9. @  那个除号那块我也改了 ,后来看书发现那个范围太大了,能阶乘到1000就算NB了……
(/@Ta/2013-06-11 01:51//)

10. 唔……刚才用手机的重启证明了,能算到50的阶乘就很NB了~~~为什么我的php标签木作用??
(/@Ta/2013-06-11 01:57//)

11. 我觉得,没必要真的去阶乘,只要每次循环之后更新最后一个非0值
(/@Ta/2013-06-11 09:00//)

12. #include <stdio.h>  int main(void) {  int sum, d;  int i, N;    printf("输入数据:\n");   while (1) {  scanf("%d", &N);   if (N > 2 && N < 2048) {      d = 1;  for (i = 1; i <= N; i++) {  sum = d * i;                 do {                  d = sum % 10;                     sum /= 10;      } while (d == 0);  }  printf("-> %d\n", d);  } else {  printf("输入数字不在0-2048之内,请重新输入!\n");  }  }   return 0; } #include <stdio.h>  int main(void) {  int sum, d;  int i, N;    printf("输入数据:\n");   while (1) {  scanf("%d", &N);   if (N > 2 && N < 2048) {      d = 1;  for (i = 1; i <= N; i++) {  sum = d * i;                 do {                  d = sum % 10;                     sum /= 10;      } while (d == 0);  }  printf("-> %d\n", d);  } else {  printf("输入数字不在0-2048之内,请重新输入!\n");  }  }   return 0; } 
(/@Ta/2013-06-11 10:01//)

13. 换行符被吞了,将就看吧
(/@Ta/2013-06-11 10:02//)

14. @eleqian 嗯,我自己复制下来换了行,看懂了,原来可以这么用while,能不用goto就不用吧~~谢谢你了!以后或许还会有问题请教
(/@Ta/2013-06-11 10:34//)

15.
#include <stdio.h>
(/@Ta/2013-06-11 10:48//)

16. [code]
<?php 
//这里写代码
?>
[@code]
@终极神天
(/@Ta/2013-06-11 10:54//)

17. [code]
<?php 
//这里写代码
?>
[@code]
@终极神天
(/@Ta/2013-06-11 10:55//)

18. @icEz 谢谢了原来要用到code标签
(/@Ta/2013-06-11 17:41//)

回复需要登录

7月29日 16:30 星期二

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1