立方尾不变
Posted coolcpp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了立方尾不变相关的知识,希望对你有一定的参考价值。
题目描述:
找出数字的立方末尾正好是该数字的数字。
如:1, 4, 5, 6, 9, 24, 25
范围:10000
解题思路:
- 要取出一个整数的后n位,用整数 % 10^n。
如:1024,取出后两位,1024 % 10^2 = 24。 - 数字最大为10000^3,一般的类型肯定装不下。除了可以用long long外,还可以用一个小技巧:每次只保留最大数的后4位, 因为这里只需要用到末尾的几位数字,这样数字就不会超过10000,int也可轻松装下。
- 求一个数字的位数方法:每次数字 / 10,直到为0,用一个变量记录几次便是数字的位数。
实现代码:
#include <stdio.h>
//计算n^t
int mypow(int n, int t)
{
int ret = 1;
if (t >= 4 && n == 10)
{
while (t--)
{
ret *= n;
}
return ret;
}
while (t--)
{
ret = ret * n % 10000;
}
return ret;
}
//获取数字的位数
int get_len(int n)
{
int len = 1;
int tmp = n / 10;
while (tmp != 0)
{
len++;
tmp /= 10;
}
return len;
}
int main()
{
int i, tmp, count = 0;
int cunum; //立方值
for (i = 1; i <= 10000; i++)
{
cunum = mypow(i, 3); //i^3
if (cunum == 0)
continue;
tmp = get_len(i);
tmp = cunum % mypow(10, tmp);
if (i == tmp)
{
printf("%d
", i);
count++;
}
}
printf("%d", count);
return 0;
}
Output:
以上是关于立方尾不变的主要内容,如果未能解决你的问题,请参考以下文章