编程计算 S=1+2+4+8、、、、、、、、、 (100项) 用汇编或C语言 选啥数据类型呀?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程计算 S=1+2+4+8、、、、、、、、、 (100项) 用汇编或C语言 选啥数据类型呀?相关的知识,希望对你有一定的参考价值。

根据等比数列前n项和公式估算S的数量级:
S=2的100次方减1, 即 (2的十次方)的十次方
约等于1000的十次方,即 10的30次方。
用什么数据类型可以保存如此大的S?

参考技术A #include "stdio.h"
#define NUM 32
void count(char *a, char *b);
int main()

int i, iResult = 0;
char a[NUM], b[NUM];

for (i = 0; i < NUM; i++)

a[i] = 0;
b[i] = 0;


b[0] = 1;
for (i = 0; i < 99; i++)

count(a, b);
count(b, b);

count(a, b);

for (i = NUM - 1; i >= 0; i--)

if ((a[i] != 0))

break;



for (; i >= 0; i--)

printf("%u", a[i]);

printf("\n");

return 0;
//两个数组相加
void count(char *a, char *b)

int i;
char c[NUM], temp[NUM];

for (i = 0; i < NUM; i++)

temp[i] = 0;
c[i] = b[i];


for (i = 0; i < NUM; i++)

temp[i] = a[i] + c[i];
if (temp[i] >= 10)

a[i] = temp[i] - 10;
temp[i] = 1;

else

a[i] = temp[i];
temp[i] = 0;



for (i = 0; i < NUM - 1; i++)

a[i + 1] += temp[i];



不知道对不对啊
参考技术B 你可以计算,2的32次方时必须要用32位的unsigned long,到2的64次方时必须使用unsigned long long(不知你的编译器是否支持),2的96次方就麻烦了,必须分段表示。 参考技术C s定义成double就可以了
#include <stdio.h>
#include <math.h>
int main()

double s=0;
int i;
for( i=0;i<100;i++ )
s += pow( 2,i );
printf("s=%lf\n" , s );
return 0;
追问

老师曾举过这样的例子:编程计算 s=从1加到1000 。后来表扬了直接用(1000+1)×1000/2 计算S的方法,说这个方法比较有效.。说直接调用乘法的话,因为C语言中的乘法,早在设计C语言时设计者就做了最好的优化,比我们编的同规模的运算要快得多。那依照老师的这个思路,是不是我这个题目编程就直接 main() int n; scanf("%d",&n); printf("The result is: %d times of 2 substract 1.\n",n); 就可以了。

追答

呵呵,采用什么方法,需要根据实际情况来确定,如果我们是为了求得数,当然是采用最直接、最快速的算法和方法。
如果,我们是为了练习循环操作,了解整个计算过程,了解编程语言运行的特点,就要按步就班的做了。
#include
#include
int main()

double s=0;
printf("input n :" );
scanf("%d",&n);
printf("The result is: %d times of 2 substract 1=%lf.\n",n,pow(2,n)-1);
return 0;

本回答被提问者采纳
参考技术D 用什么数都不行 一把还有阶乘的题 这种 就只有用 字符串和数字之间转化来做 模拟下手工计算的方法 考虑什么进位啊 这些

以上是关于编程计算 S=1+2+4+8、、、、、、、、、 (100项) 用汇编或C语言 选啥数据类型呀?的主要内容,如果未能解决你的问题,请参考以下文章

python高阶函数式编程

Python编程计算,在线急!

C++学习8-C++提高编程

计算器代码

计算概论(A)/基础编程练习2(8题)/5:点和正方形的关系

[PTA]实验4-1-8 求给定精度的简单交错序列部分和