练习要求查找1到500中的哪个数字,特定数字的总和,提升到第三个幂等于该特定数字。
例如1 ^ 3 = 1 371使得3 ^ 3 + 7 ^ 3 + 1 ^ 3 = 371
我是如何处理这个问题的:
我在想如果我有一个包含500个插槽的字符串数组,每个插槽包含一个字符串转换的数字,那么我可以用每个插槽的字符串进行数学运算。如果他们符合我将申请的标准,那么将打印该插槽。
我尝试了函数sprintf但没有取得多大成功。在一个循环中,它只是初始化字符串(或者它是数组?3小时后我感到困惑)[0]插槽,让所有其他插槽保持不变。
我不希望你解决这个问题,而不是用我的逻辑来指导我。如果你愿意,请让我添加我所做的代码。
答案 0 :(得分:4)
始终明确定义算法,以便了解自己在做什么。将其拆分为简单的步骤。像这样:
For each integer i in the interval 1 to 500:
Check if the condition holds for this i
If it holds:
Print i
else:
Do nothing
现在您需要定义“检查条件是否适用于此”。我会使用一些模数和除法算术来提取数字,但我会把细节留给你。
请注意,我没有谈论过C或任何其他编程语言。只有当你知道你的算法时,才应该开始考虑实现。
(实际上可能存在与上面给出的算法略有不同的算法,其中每个数字都有一个循环嵌套在彼此内。这个解决方案可能是你可以接受的,但它不会像通用那样)
答案 1 :(得分:2)
for(i=1;i<=500;i++)
{
//loop for checking each number i
int sum=0; // to store the sum of cube of digits
int n=i; //copy of i
//The below while loops does the task. It extracts a digit from the number and adds its cube to the sum
// last digit from the number can be seen by taking its remainder by 10 . For eg 35%10=5
//once we have used this digit make the number shorter by dividing by 10. For eg 35/10 becomes 3 (because of integer divisions)
while(n>0)
{
int rem=n%10; //extract the last digit
sum+=cube(rem); //cube function raises a number to its cube
n/=10; //remove the digit we had extracted earlier from the number
}
if(sum==i) //we got the number we wanted
printf("%d\n",i);
}