zoukankan      html  css  js  c++  java
  • PAT Basic Level 1002

    题目:

    思路:1.输入的数据大小巨大无法用int,double类型保存并且题设要求需要读取每位上的数字所以选择用char数组保存。将其每位相加后用printchn函数打印出。

    2.pringchn函数:读入一个数字,我们要先输出的最高位,呢么如何获取他的最高位?例 a = 1234,如何先获取1呢?显然将 a / 1000,呢么如何得到1000呢?

    a.    设置mask = 1; 让a不停除以10知道得到0为止,每除以一次10,mask * 10。 a = a / 10 = 123,mask *= 10; a = a / 10 = 12 mask *= 10....

    注意最后得到的mask 大一位 a = 1234 ,mask = 10000,最后需要将mask / 10。

    b.   得到mask后利用a / mask 得到最高位 ,每次做完 另 a = a%mask,mask /= 10;

    重点思考数字中的零和末尾的零是否有影响。

    1.在求mask的过程中:即使中间或末尾有零皆不影响,因为只有当a = 0时才停止mask自乘。例:a = 10450, a = 1045 ,a= 104 , a = 10,a = 1,a = 0,

    2.在正序取出每位数字时:重点注意结束条件不是 a != 0 而是 mask != 0;例:a = 10000,mask = 10000; a = 10000 / mask = 1, mask /= 10 = 1000;a = 1 / mask = 0,mask /= 10 = 100;a = 0 / mask = 0,mask /= 10 = 10;a = 0 / mask = 0,mask /= 10 = 1; a = 0/mask = 0,mask /= 10 = 0;

    AC代码

     1 #include <stdio.h>
     2 void PrintChn(int num)
     3 {
     4     int cnt = 0;
     5     int tempNum = num;
     6     while (tempNum>0)
     7     {
     8         tempNum = tempNum/10;
     9         cnt++;
    10     }
    11     int i;
    12     int mask = 1;
    13     for(i = cnt;i > 0;i--)
    14     {
    15         mask *= 10;
    16     }
    17     mask = mask/10;
    18     while (mask != 0)
    19     {
    20         int temp = 0;
    21         temp = num/mask;
    22         num = num % mask;
    23         mask = mask/10;
    24         switch (temp)
    25         {
    26             case 0:printf("ling");
    27             break;
    28             case 1:printf("yi");
    29             break;
    30             case 2:printf("er");
    31             break;
    32             case 3:printf("san");
    33             break;
    34             case 4:printf("si");
    35             break;
    36             case 5:printf("wu");
    37             break;
    38             case 6:printf("liu");
    39             break;
    40             case 7:printf("qi");
    41             break;
    42             case 8:printf("ba");
    43             break;
    44             case 9:printf("jiu");
    45             break;    
    46         }
    47         if(mask>0)
    48         {
    49             printf(" ");
    50         }
    51     }
    52 }
    53 int main ()
    54 {
    55     char box[100]; //define "box"char array for input num;
    56     scanf("%s",&box);
    57     int temp = 0;
    58     int i = 0;
    59     while(box[i] != 0)
    60     {
    61         temp += (int)box[i] - '0';
    62         i++;
    63      } 
    64      PrintChn(temp);
    65     return 0 ;
    66      
    67  } 
  • 相关阅读:
    yaf将错误输出打印在页面上
    yaf设置命名空间
    yaf学习资料
    在 Github 上找「好东西」的方法
    在linux命令行下执行php 程序
    linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计
    php数组函数分析--array_column
    php 去掉字符串的最后一个字符
    设置arc 的默认编辑器
    需要学习的技术
  • 原文地址:https://www.cnblogs.com/Ponytai1/p/5975413.html
Copyright © 2011-2022 走看看