doublefloweryu 2022-10-23 17:06 采纳率: 100%
浏览 73
已结题

求“自守数”程序优化

“自守数” 是平方尾数等于该数自身的自然数。例如:

2525=625 7676=5776 9376*9376=87909376;
输入:n(自守数的位数)(n <= 15);输出:n 位的自守数

当n>5时超出运行时间限制
如何优化程序,使当n较大时运行时间缩短?(以下是我写的程序)
#include<stdio.h>
#include<math.h> 
int main()
{
     int n;
    long long mul, number, k, a, b;
    scanf("%d",&n); 
    for( number=pow(10,n-1); number<pow(10,n); number++ )
    {
        for( mul=number, k=1; (mul/=10)>0; k*=10 );
        a = k * 10; 
        mul = 0;  
        b = 10; 
        while(k>0)
        {
            mul=( mul + ( number%(k*10) )*( number%b - number%(b/10) ) )%a;
            k /= 10;
            b *= 10;
        }
        if(number == mul) 
            printf("%lld\n", number);
    }
    return 0;
 
}

  • 写回答

2条回答 默认 最新

  • X-道至简 2022-10-23 19:19
    关注

    想到3个
    第一个 for( mul=number, k=1; (mul/=10)>0; k*=10 );这句话是不是多余,在循环外面用pow算下值,这里n是知道的
    第二个 平方的之后末尾只会出现 0 1 4 5 6 9 , 2 3 7 8末尾的可以直接pass掉 并且这里只有可能末尾是1 5 6的数字
    第三个 把平方换成多项式 取有效的数 比如25 * 25 =(20+5)^2 取有效位 20 * 5 * 2 + 5 * 5
    可以在想想是否还有其它规律

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 修改了问题 10月23日
  • 创建了问题 10月23日

悬赏问题

  • ¥100 复现论文:matlab仿真代码编写
  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题