其实也没什么要注意的,这里以水仙花数题目为例:
题目:
水仙花数
类别
流程控制
时间限制
2S
内存限制
10000Kb
问题描述
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。
输入说明
输入由两个整数a和b构成,a和b之间用空格分隔。0<a,b<10000
输出说明
输出区间[a,b]或区间[b,a]上水仙花数的个数。
输入样例
3 1000
输出样例
4
提示
a,b的位数n可能小于3
第一,不注意a,b取值范围,将会为您带来更长的代码量
本来不是三位就是四位,方便得很
第二,输入的数字只用到了一遍,直接交换出a小b大就完事了
这是审题上的
绿色的都会,就不提了
取值范围!!!!!!!!
其次是一大堆数字字母定义来定义去的时候.....
1.小心整形和浮点型
除法除非是取整,否则一律无脑加点
2.注意一些循环内的计数变量,第一点计数变量一定要初始化为0;
第二点,在嵌套循环里的计数变量大概率是要反复计数的,所以要在里面初始化为0!!
3.代码如果通过但是运行不出——
1.直接崩溃,可能涉及地址和循环数字过大
2.一直运算,可能循环条件出问题了,或者循环变量在代码里面 二次赋值
代码没有把红色对应的问题订正
#include <stdio.h>
#include <math.h>
int function(int a, int b)
{
int i, k, m, n, t;
int sum;
int count = 0;
int temp;
if (a >= b)
{
t = a;
a = b;
b = t;
}
for (i= a; i<= b; i++)
{
sum = 0;
temp = i;
n = 0;
if (i< 100)
continue;
while (temp)
{
temp = temp/10;
n++;
}
for (k=0; k<=10; k++)
{
m = int(i / pow(10,k)) % 10;
sum += pow(m,n);
}
if (i == sum)
count++;
}
return count;
}
int main(void)
{
int a1, a2;
scanf("%d %d", &a1, &a2);
printf("%d", function(a1, a2));
return 0;
}