Algorithm Design Everyday——1.魔女数字7

题目描述:

   嘿嘿,这个关于 7 的题目这次算是第三次了。这个 7 可谓是最厉害的,呵呵。 首先,如果这个数要在 1 - 1 000 000之间, 并且能够被 7 整除或者用 10 进制表示的时候包含数字 7, 那么这个数就叫做魔女の数。

输入:

  有多个测试点,每个测试点一行,只有两个整数 a 和 b, 你需要计数出 a 和 b 之间(包含 a 和 b)一共有多少个 魔女の数。不过如果 a 与 b 其中有一个不在魔女の数 的范围内的话,应该输出 Overflow。

输出:

  对每个测试点输出对应的魔女の数的数目, 一个结果一行,按样例格式输出。

样例输入:

1 10

7 17

0 9

样例输出:

有 1 个魔女の数

有 3 个魔女の数

题目要点:

(1)注意各种各样的输入格式(空格,回车,负号,0),才能提取出head以及tail;

(2)求出[a,b]之间的所有跟7有关(一是模7为0,而是数字本身包含7)的数字个数。

参考代码:

  1 #include<iostream>
  2 using namespace std;
  3 
  4 char input;
  5 
  6 void function(char first, int *head, int *tail)
  7 {
  8     if(first == '-')//判断开头没有没有负号,有的话直接输出overflow
  9     {
 10         *head = 0;
 11         return ;
 12     }
 13 
 14     if((first == '
' ) || (first == ' ') || first == '0')//判断字符开头是不是无关字符
 15         return ;
 16 
 17     input = first;
 18 
 19     *head = 0;
 20     while((input != ' ') && (input != '
'))//找出head
 21     {
 22         *head = (*head) * 10 + input - '0';
 23         if(*head > 1000000)//显然head > 1000000直接返回
 24         {
 25             while((input = getchar()) && input != '
')//找到整个输入串的末尾
 26                 ;
 27             return ;
 28         }
 29 
 30         input = getchar();
 31     }
 32 
 33     while(input==' ') //吞掉head与tail之间的空格
 34         input=getchar();             
 35 
 36     int check = 0;//判断tail的第一个元素是不是0
 37     while(input!='
') //找出tail                                   
 38     {                                               
 39         if(input=='-') 
 40             return;
 41         else if(input=='0' && check==0)
 42             ;       
 43         else if(input==' ')                             
 44         {                                                   
 45             while((input=getchar()) && input!='
')
 46                 ;    
 47             return;
 48         }
 49         else
 50         {
 51             *tail=(*tail)*10+input-'0';
 52             check=1; 
 53             if(*tail>1000000)
 54             {
 55                 while((input=getchar()) && input!='
')
 56                     ;
 57                 return;
 58             }
 59         }
 60         input=getchar();
 61     }
 62     return;
 63 }
 64 
 65 void judge(int head, int tail)     //没 overflow 的情况下判断 head tail 之间的魔女数
 66 {
 67     int temp=0, copy;
 68     for(; head <= tail ; head ++)
 69     {
 70         if(head % 7 == 0) //模7为0,则跳出
 71             temp ++;
 72         else 
 73         {
 74             copy = head;
 75             while(copy > 0)
 76             {
 77                 if((copy - (copy / 10) * 10) == 7)//包含7就++,然后跳出
 78                 {
 79                     temp++;
 80                     break;
 81                 }
 82                 else 
 83                     copy /= 10;
 84             } 
 85         }
 86     }
 87     printf("有%d 个魔女の数
", temp);
 88 }
 89 
 90 int main()
 91 {
 92     char first;
 93     int head, tail;
 94 
 95     while((first = getchar()) && first != EOF)
 96     {
 97         head = -1;
 98         tail = 0;
 99 
100         function(first, &head, &tail);//找出head以及tail
101 
102         if(head == -1)
103             continue;
104         else if((head > 0 && head <= 1000000) && (tail > 0 && tail <= 1000000))
105         {
106             if(head <= tail)
107                 judge(head, tail);
108             else
109                 judge(tail, head);
110         }
111         else
112         {
113             printf("Overflow
");
114             while(input != '
')
115                 input = getchar();
116         }
117     }
118 
119     return 0;
120 }
原文地址:https://www.cnblogs.com/yiyi-xuechen/p/3452277.html