2-4子序列的和
输入两个正整数n<m<10^6,输出1/ n^2+1/ (n+1)^2+……+1/ m^2,保留5位小数。输入包含多组数据,结束标记为n=m=0.提示:本题有陷阱
本题思路在于乘法溢出的问题
陷阱就是关于int类型的极限,因为Int的上限是2^32-1
#include <stdio.h>
int main()
{
int n,m;
double a;
while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
{
a=0.0;
for(long long i=n;i<=m;i++)//若变为int类型则,会有乘法溢出的问题
{
double b=i*i;
a+=1/b;
}
printf("%.5f\n",a);
}
}
2.5 分数化小数
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b<=10^6,c<=100.输入包含多组数据,结束标记位a=b=c=0
#include<stdio.h>
int main()
{
int a,b;
int c,i;
while(scanf("%d %d%d",&a,&b,&c)!=EOF&&a,b,c)
{
int d[110];//小数点后面数字用数组表示出来
d[0]=0;
for(i=1;i<=c;i++)
{
int e=a*10/b;
d[i]=e%10;
a=a*10;
}
d[i]='\0';
if(d[i-1]>=5) d[i-1]+=1;
printf("0.");
for(i=1;d[i]!='\0';i++)
{
printf("%d",d[i]);
}
printf("\n");
}
}
2.6 排列
用1,2,3,……9组成3个三位数 abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。
按照”abc def ghi”的格式输出所有解,每行一个解。
思路:1:2:3可以说明假设用一个最小的三位数就可以表示出其他的二个数,然后就是最小的三位数是123,它的最大值是987/3得到329
还有就是判断是否每个数字只使用了一次
#include <stdio.h>
int main() {
int a,b,c,d,e,f,g,h,i,j,k,l,m,o;
for(int a=123;a<=329;a++)
{
int n=0;
b=a;
c=b/100;
d=b/10%10;
e=b%10;
f=b*2;
g=f/100;
h=f/10%10;
i=f%10;
j=b*3;
k=j/100;
l=j/10%10;
m=j%10;
for(o=1;o<=9;o++)
{
if(c==o)n++;
else if(d==o) n++;
else if(e==o) n++;
else if(g==o) n++;
else if(h==o) n++;
else if(i==o) n++;
else if(m==o) n++;
else if(k==o) n++;
else if(l==o) n++;
}
if(n==9)
printf("%d\t%d\t%d\n",b,f,j);
}
}