13的100次方的计算

今天看到了这个题,开始的时候不知道怎么,然后就查了各种资料,加之gdb的调试之后总算是有些成效了。现在把它记录下来,整理一下。

题目就是标题,用一个数组存储13的100次方的值,然后输出来。

代码如下:

说明一下:这个代码是我拷的网上的代码,这里只是把他解析一下而已;

1 #include<stdio.h>
2
3 int main()
4 {
5 int a[100]={1,0},b[100]={0};
>> 6 b[-1]=0;
7 int i,t,cut=1;
8 for(i=1;i<101;i++)
9 {
10 for(t=0;t<cut;t++)
11 {
12 b[t]=a[t]=a[t]*13;
13 a[t]=a[t]%1000+b[t-1]/1000;
14 if(b[cut-1]!=0)
15 cut++;
16 }
17 }
18 printf("13的100次方是:");
19 for(i=cut-1;i>=0;i--)
20 {
21 printf("%d",a[i]);
22 }
23 printf("\n");
24 return 0;
25 }

如下是我进行gdb调试的结果。

从上面的过程可以看出来,a,b数组在不断的扩充;如下示出13的次方,可以进行对比。

13^1=13;

13^2=169;

13^3=2,197;

13^4=28,561;

13^5=371,293;

13^6=4,826,809

......

可以看出来a数组中迭代的是13的次方的每隔3位数字,而且a[0]保存的是低三位,依次提高;b数组中存储的是每次a数组的对应位的前一个数和13的乘积,并且b[t-1]/1000中的数就是超出三位数的数,加到高位a[t]中,即:低三位向高位的进位,然后a的高位加上之后继续可以求出a的高位。简单的说就是,13的每次乘积每三位一分隔,然后迭代低三位*13%1000,就是下一个迭代的低三位,然后低位的进位与高位的乘积相加的结果*13,就是下一个迭代的高三位。依次循环继续执行。

时间: 2024-10-25 13:32:42

13的100次方的计算的相关文章

案例六:实现1+2+3+...+100的求和计算

package project_06; /** * 2018年9月7日22:45:05 * @author Suaron XiaMen * */ public class Summation { //计算1+2+3+...+100 public static void main(String[] args) { int summation=0; for(int i=1;i<=100;i++){ summation+=i; } System.out.println("1+2+3+...+10

openjudge-2的100次方阶乘

#include <stdio.h> #include <string.h>int main(){ int n; scanf("%d",&n); if(n==0) printf("1"); int sun[100]; memset(sun,0,sizeof(sun)); sun[99]=1; while(n--) { for(int i=0; i<100; i++) { sun[i]*=2; if(sun[i]>=10)

13类100个常用Linux基础命令

玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.然而每个人玩Linux的目的都不同,所以他们常用的命令也就差异非常大,而我主要是用Linux进行C/C++和shell程序编写的,所以常用到的命令可以就会跟一个管理Linux系统的人有所不同.因为不想在使用是总是东查西找,所以在此总结一下,方便一下以后的查看. 不多说,下面就说说最常用的Linux命令. 一.命令的基本格式 二

用python脚本来计算100以内奇数或者偶数之和

#!/usr/bin/python#coding:utf-8#while#计算1+2+3+...+100的和#计算1+3+5...+99的和sum=0i=0while i<=99:i=i+1if i%2==0:continuesum=sum+iprint s #计算2+4+6...+100的和sum=0i=0while i<=99:i=i+1if i%2!=0:continues=sum+iprint s 原文地址:http://blog.51cto.com/13587189/2070070

计算概论(A)/基础编程练习2(8题)/1:求平均年龄

1 #include<stdio.h> 2 int main() { 3 // 声明与初始化 4 int n, count=1, s=0, age=0; 5 6 // 输入学生人数 7 scanf("%d", &n); 8 9 // 循环读入 加和 10 while(count<=n) { 11 scanf("%d",&age); 12 s+=age; 13 count++; 14 } 15 16 // 计算平均年龄输出 17 pr

08--MOOC--C/C++ 根据年月日计算星期几——蔡勒公式篇

C/C++ 根据年月日计算星期几——蔡勒公式篇 蔡勒公式  蔡勒(Zeller)公式:是一个计算星期的公式.随便给一个日期,就能用这个公式推算出是星期几.蔡勒公式如下:W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下:w:星期: w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六c:世纪-1(前两

c语言详解  蔡勒(Zeller)公式计算某一天是星期几  极其方便

—— 蔡勒(Zeller)公式 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式.即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 公式中的符号含义如下,w:星期:c:世纪-1:y:年(两位数):m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1.2月要看作上一年的13.14月来计算,比如2003年1月1日要看作2002年的13月1日来计算):d:日:[ ]代

python练习集100题(21-40)

题目21:两个乒乓球队进行比赛,各出3人.甲队为a,b,c三人,乙队为x,y,z三人.以抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x.z比,请编程找出三队比赛名单. first_list=['x','y','z'] for i in first_list:        #i是a的对手,j是b的对手,k是c的对手     for j in first_list:         if(j!=i):                        for k in fir

js浮点数计算(加,减)

最近工作中经常遇到需要处理浮点型计算的问题,开始一直都在用把浮点数先乘以10的对应小数的位数的次方化成整数再去开始计算. 例如100.01+100.02,可以化成(100.01*100+100.02*100)/100来做计算,但是最近发一个浮点数乘以一个10的次方也会有精度问题发生,突然感觉前面的工作是不是有好多地方埋了很多坑啊,不能愉快的工作啦. 正好周未没什么别的计划,想研究下怎么处理JS的浮点型计算的精度问题 既然浮点数的计算精度有问题,那何不就在计算过程中绕过浮点型的计算了,于是有如下思