zoukankan      html  css  js  c++  java
  • 优化:一个简单小题

    题目来源于HDOJ1013

    把一个正整数的各位数字之和加起来,如果得到一个个位数,就打印它,否则重复对和的各位数字相加,直到得到个位数,打印它;若输入为 0 则结束。

    这个题要处理比较大的数(字符串表示)

    放弃了在 while((ch=getchar() != EOF)) 下分情况讨论后(详情自己试),容易想到下面的方法:

     1 # include <stdio.h>
    2
    3 int main()
    4 {
    5 char ch;
    6 int ans;
    7
    8 while (ch=getchar() != '0')
    9 {
    10 ans = (ch-'0')%9;
    11 while ((ch=getchar()) != '\n')
    12 ans += (ch-'0')%9;
    13 printf("%d\n", (ans+8)%9+1);
    14 }
    15
    16 return 0;
    17 }

    上面的代码有一个错误,导致初步测试结果不对:while (ch=getchar != '0') (优先级!)

    改正后:

     1 # include <stdio.h>
    2
    3 int main()
    4 {
    5 char ch;
    6 int ans;
    7
    8 while ((ch=getchar()) != '0')
    9 {
    10 ans = (ch-'0')%9;
    11 while ((ch=getchar()) != '\n')
    12 ans += (ch-'0')%9;
    13 printf("%d\n", (ans+8)%9+1);
    14 }
    15
    16 return 0;
    17 }

    这里还有一种写法(结构不同代表思路不同!):

     1 /* digit root */
    2
    3 # include <stdio.h>
    4
    5 char ch;
    6 int ans;
    7
    8 int main()
    9 {
    10 while (1)
    11 {
    12 if ((ch=getchar()) == '0') break;
    13 ans = 0;
    14 while (ch != '\n')
    15 {
    16 ans += ch-'0';
    17 ch=getchar();
    18 }
    19 printf("%d\n", (ans+8)%9+1);
    20 }
    21
    22 return 0;
    23 }

    这种结构明显不如前一种思路清晰,但是效率却高于前一种,原因在于去掉了多余且耗时的取模运算!而这道题 int 型足够保存一个字符串表示的大数的各位数字的和。因此有了下面的写法:

     1 /* digit root */
    2
    3 # include <stdio.h>
    4
    5 char ch;
    6 int ans;
    7
    8 int main()
    9 {
    10 while ((ch=getchar()) != '0')
    11 {
    12 ans = (ch-'0')%9;
    13 while ((ch=getchar()) != '\n')
    14 ans += ch-'0';
    15 printf("%d\n", (ans+8)%9+1);
    16 }
    17
    18 return 0;
    19 }



  • 相关阅读:
    xsd的解释说明
    SDUT 2498-AOE网上的关键路径(spfa+字典序路径)
    java实现各种数据统计图(柱形图,饼图,折线图)
    软件測试计划模板
    范式图形辨析
    Android做法说明(3)---Fragment使用app袋或v4包解析
    登录同步多个副本如何实现的拷贝数发生变化分布式
    ZOJ1463:Brackets Sequence(间隙DP)
    jquery php 百度搜索框智能提示效果
    Hibernate在关于一对多,多对一双向关联映射
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2390805.html
Copyright © 2011-2022 走看看