实验三
1.计算a-b之间特定数值之和
2. 1!+2!+…+k!=?(判断是否溢出
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,M,k,j,i,p,sum=0;
scanf("%d",&M);
for(i=0;i<M;i++)
{
sum=0;
scanf("%d %d %d",&a,&b,&k);
for(j=a;j<=b;j++)
{
p=j;
while(p) 等价于while(p!=0)
{
if(abs(p%10)==k) /最好在这里用绝对值
/若变换j的值的话,会混淆+ -
/巧妙的用 /10解决循环问题
{
sum+=j;
break;
}
p/=10;
}
}
printf("%d\n",sum);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int k,i=1,j,c,b=1,flag=0,n;
unsigned long long sum=0;
scanf("%d",&k);
for(i=1; i<=k; ++i)
{
c=b;
b*=i;
if((double)b/c!=i) /k为正整数,一定要定义成 int
/只要分式溢出来了,和就溢出来了
/变换(double)类型
/如何判断溢出 先*再/
{
printf("overflow\n");
return 0;
}
sum+=b;
}
printf("%llu",sum);
return 0;
}
/错误:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int k,i=1,j,flag=0,n;
unsigned int c,b=1,sum=0; /注意定义的类型
scanf("%d",&k);
for(i=1; i<=k; ++i)
{
c=b;
b*=i;
if((double)b/c!=i)
{
printf("overflow\n");
return 0;
}
sum+=b;
}
printf("%lld",sum);
return 0;
}