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 }



  • 相关阅读:
    jenkins+tomcat+python+pytest的web自动化化部署
    windows的jenkins+tomcat工作目录配置(这个要安装前就提前确定好,这种方法会导致整个jenkins重置)
    pytest xunit2 in pytest6.0
    Jenkins基本配置一
    React生命周期函数的使用场景
    React中的生命周期函数(老版本V16.0之前)
    React中ref的使用
    React中setState注意事项
    React之虚拟DOM中的Diff算法
    React之深入了解虚拟DOM
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2390805.html
Copyright © 2011-2022 走看看