乘积的末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 }