乘积的末3位(product) 算法竞赛入门经典 习题3-3

  输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末3位。这些整数中会混入一些由大写字母组成的字符串,你的程序应当忽略它们。提示:试试看,在执行scanf("%d")时输入一个字符串会怎样?

C版本:

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 const int magic=100;
 5 char str[magic];
 6 int main(){
 7     int n,product=1,num;
 8     while(1){
 9         num=scanf("%d",&n); //scanf("%d")读到一个字符串,不会报任何错误,字符串仍在文件流中,未被读取,返回值为0
10         if(num==EOF)
11             break;
12         if(num==1)
13              product=(product*(n%1000))%1000;
14         else
15             scanf("%s",str); //scanf读到文件末尾或者输入流错误,返回EOF
16     }
17     printf("%03d\n",(product>=0?product:-product));
18     return 0;
19 }

 

c++版本:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 const int magic=100;
 5 char str[magic];
 6 int main(){
 7     int n,product=1;
 8     while(1){
 9         cin>>n;
10         if(cin.eof()) //判断cin是否已经读到EOF字符,读到EOF时cin把eof.bit和fail.bit都设置成了1.
11             break;
12         if(cin.fail()){ //由于fail()在读到不正确的格式、读取流错误和读到EOF时都返回TRUE。bad()只在流错误(多是系统引起)时返回TRUE
13             cin.clear();
14             //cin.ignore(magic,' ');//如果使用空格分隔
15             //cin.ignore(magic,'\n');//如果使用换行分隔
16             cin>>str;//不知道用什么分隔的,读入字符串,discard
17         }else{
18             product=(product*(n%1000))%1000;
19         }
20     }
21     printf("%03d\n",(product>=0?product:-product));
22     return 0;
23 }

 

posted @ 2013-07-12 11:09  purgiant  阅读(332)  评论(0编辑  收藏  举报