输入若干个整数(可以是正数、负数或者零),输出他们的乘积的末三位。这些整数中会混入一些由大写字母组成的字符串,你的程序应忽略它们。提示:试试看,在执行scanf("%d")时输入一个字符串会怎样?
#include<stdio.h>
#include<string.h>
char s1[1010],s2[1010];
int num1[1010],num2[1010];
int n,m,i,j,x,y,s,t;
/**************主函数**********/
int main(){
while(~scanf("%s%s",s1,s2)){
n=strlen(s1);
m=strlen(s2);
for(x=i=0;i<n;i++){
if(s1[i]>='0'&&s1[i]<='9'){
num1[x++]=s1[i]-'0'; // 注意是x++
}
}
for(y=j=0;j<m;j++){
if(s2[j]>='0'&&s2[j]<='9'){
num2[y++]=s2[j]-'0'; //注意是y++
}
}
/***************将字符转化为数字**************/
if(x>=3){
s=num1[x-1]+num1[x-2]*10+num1[x-3]*100;
}else{
for(s=i=0;i<x;i++){
s=s*10+num1[i];
}
}
if(y>=3){
t=num2[y-1]+num2[y-2]*10+num2[y-3]*100;
}else{
for(t=i=0;i<y;i++){ //将数组转换为数字,很多情况都可用到。
t=t*10+num2[i];
}
}
/**************将字符型数组转化为数字******************/
注意:这里有一个小小的bug需要注意。如果是-0乘以一个数的话,结果会是-0;
聪明如你会怎样做呢?
对了,只需:// if((n==2&&s1[0]=='-'&&s1[1]=='0')||(m==2&&s1[0]=='-'&&s2[1]=='0')) printf("0\n");同时下面的if应改为else if,即可。
if((s1[0]=='-'&&s2[0]=='-')||(s1[0]!='-'&&s2[0]!='-')){
printf("%d\n",s*t%1000);
}
else{
printf("-%d\n",s*t%1000);
}
}
return 0;
}