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

<?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|隐藏机器人聊天)
  • @Ta / 2013-06-10 / /
    用go to 啊!
  • @Ta / 2013-06-10 / /
    楼主,真心没看懂,说下你要做什么,这个程序要实现什么事
  • @Ta / 2013-06-10 / /
    懂了……不过,你不觉得2048的阶乘,非常非常大吗?
  • @Ta / 2013-06-10 / /
    @  一个题,在/*  */里,我想解决那个题,可是程序写出来有问题了
  • @Ta / 2013-06-10 / /
    @   呃……在测试期间手机死机了一次~~~唉……这只是那个题的假设
  • @Ta / 2013-06-10 / /
    goto那里有问题,不断循环,还要我按音量下+c
  • @Ta / 2013-06-10 / /
    @终极神天
    <?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 / /
    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-11 / /
    @  那个除号那块我也改了 ,后来看书发现那个范围太大了,能阶乘到1000就算NB了……
  • @Ta / 2013-06-11 / /
    唔……刚才用手机的重启证明了,能算到50的阶乘就很NB了~~~为什么我的php标签木作用??
  • @Ta / 2013-06-11 / /
    我觉得,没必要真的去阶乘,只要每次循环之后更新最后一个非0值
  • @Ta / 2013-06-11 / /
    #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 / /
    换行符被吞了,将就看吧
  • @Ta / 2013-06-11 / /
    @eleqian 嗯,我自己复制下来换了行,看懂了,原来可以这么用while,能不用goto就不用吧~~谢谢你了!以后或许还会有问题请教
  • @Ta / 2013-06-11 / /
    #include <stdio.h>
  • @Ta / 2013-06-11 / /
    [code]
    <?php 
    //这里写代码
    ?>
    [@code]
    @终极神天
  • @Ta / 2013-06-11 / /
    [code]
    <?php 
    //这里写代码
    ?>
    [@code]
    @终极神天
  • @Ta / 2013-06-11 / /
    @icEz 谢谢了原来要用到code标签
添加新回复
回复需要登录