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