求一个数的后三位

8 篇文章 0 订阅

29.【中学】求最后3位数值

小明在中学会求一个数的 n 次方了,但计算机还不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出 a 的 n 次方的最后 3 位数就可以了。

输入:

a 和 n 的值。假设 a<=150 。

输出:

求 a 的 n 次方的最后 3 位数。

提示:再想一想,你的方法对吗?你用的是什么数据类型?
测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示

10 0↵

以文本方式显示

The last 3 numbers is 1.↵

1秒 	64M 	0

测试用例 2 以文本方式显示

2 8↵

以文本方式显示

The last 3 numbers is 256.↵

1秒 	64M 	0

测试用例 3 以文本方式显示

100 10↵

以文本方式显示

The last 3 numbers is 000.↵

1秒 	64M 	0

代码

#include <stdio.h>
int main()
{
    int n,N,i,r=1;
    scanf("%d%d",&n,&N);//输入n和N
    n%=1000; //n截取后三位。
    for(i = 0; i < N; i ++)//循环N次,计算N次乘积。
        r=r*n%1000;//每次结果取后三位。
    printf("%d\n", r);//输出结果
    return 0;
}

解释

C语言 求一个数N次方最后三位数
#include <stdio.h>
long int main ()
{
long int m,n,i,a,b;
scanf ("%d%d",&m,&n);
a=m;
for (i=1;i<n;i++);
if (a>1000)
{a=a%1000;}
a=m*a;
if (a%1000==0)
printf (“The last 3 numbers is 000.”);
else
b=a%1000;
printf (“The last 3 numbers is %d.”,b);
return 0;
}
为什么输入一个数字后不会循环 直接就取余了呢。。
我来答
分享
举报 浏览 3668 次
2个回答
#网络热词科普# D&G是什么意思?
最佳答案
flczzhang
知道合伙人互联网行家 2017-04-13

一、对于任意一个数,求最后三位数,可以对其用1000取余。 即对于任意的n,其最后三位数为

n%1000

二、对于任意整数n, 如果后三位为l,那么存在整数k, 可以将n写作

n=k*1000+l

的形式。

三、对于任意的整数n1, n2,写作k11000+l1,k21000+l2的形式。 那么

n1n2=(k11000+l1)(k21000+l2)

=k1k21000000+k1l21000+k2l11000+l1*l2

=(k1k21000+k1l2+k2l1)1000+l1l2

所以,n1n2的后三位,与l1l2后三位相同。

四、综上,算法可以设计为,要求n的N次方的后三位,只要每次乘的时候,只取后三位结果即可。

另附一段代码

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,j,a,k,m[300],q[300],p[3],g,s,b,f=3;
    scanf("%d%d",&a,&n);
    b=a/100;
    s=(a%100)/10;
    g=a%10;
    for(i=0;i<300;i++)
    {
                      m[i]=0;
                      q[i]=0;
                      }
    m[0]=g;m[1]=s;m[2]=b;p[0]=g;p[1]=s;p[2]=b;
    for(i=1;i<n;i++)
    {
                   for(j=0;j<=2;j++)
                   {
                                    for(k=0;k<f;k++)
                                    {
                                                     q[k+j]=q[k+j]+p[j]*m[k];
                                                     if(q[k+j]>=10)
                                                     {
                                                                   q[k+j+1]=q[k+j+1]+q[k+j]/10;
                                                                   q[k+j]=q[k+j]%10;
                                                     }
                                    }
                   }
                   f=f+2;
                   for(k=0;k<f;k++)
                   {
                                   m[k]=q[k];
                                   q[k]=0;
                                   }
    }
    if(n==0)
    printf("The last 3 numbers is 1.\n");
    else
    printf("The last 3 numbers is %d%d%d.\n",m[2],m[1],m[0]);
    system("pause");
    return 0;
}
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值