社区
C++ 语言
帖子详情
求个大数问题:3的1-50次方之和的输出
tq01oyf
2005-04-12 02:16:37
RT:
最好是能详细解释一下算法,谢谢
...全文
233
13
打赏
收藏
求个大数问题:3的1-50次方之和的输出
RT: 最好是能详细解释一下算法,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
功克
2005-04-12
打赏
举报
回复
如果是1076846981537778883155372,c++可能早就溢出了
tq01oyf
2005-04-12
打赏
举报
回复
1076846981537778883155372 用C/C++如何输出?
tq01oyf
2005-04-12
打赏
举报
回复
迷茫……
tiaoci
2005-04-12
打赏
举报
回复
这个数因为不是很大,使用 Cy(currency)计算就可以了
tiaoci
2005-04-12
打赏
举报
回复
不就是 (3^51 - 1) / 2 - 1 吗?
显然应当是 1076846981537778883155372 ,前面的答案错!
lw1a2
2005-04-12
打赏
举报
回复
其实就是用一个链表(或数组)来保存大数的每一位,相应的进位规则要自己规定
tq01oyf
2005-04-12
打赏
举报
回复
楼上的误会我的题目了……
long int是不够存储的……
JohnLayer
2005-04-12
打赏
举报
回复
第一步循环求3的N次方(N=1-50)
第二步将50个结果相加
long int k=3;//k的值为3
int i=2,sum=0;//定义从3的i次方算起,因为3的1次方就是3,sum是和
sum+=k;//3的i=1次方的和
for(i=2;i<=50;i++)//从2次方到50次方的运算,方便你看所以写成这种形式,一般初始设置i=0
k*=k;//计算k的i次方
sum+=k;//计算i次方的和
tq01oyf
2005-04-12
打赏
举报
回复
能否说说算法思想啊,分不够可以加的啊.我只学过C,现在只看了点C++,2楼链接是对了,可看不懂啊.求助……
asi_2104
2005-04-12
打赏
举报
回复
#include <stdio.h>
main()
{ int i;
float sum=0,num();
for(i=1;i<=50;i++)
sum+=num(i);
printf("%.0f",sum);
}
float num(int j )
{ int i;
float k=1;
for(i=1;i<=j;i++)
k*=3;
return k ;
}
值为:1076846987931680710000000
bianliuwei
2005-04-12
打赏
举报
回复
????????
tianhxk
2005-04-12
打赏
举报
回复
等比数列啊,数学问题
pcboyxhy
2005-04-12
打赏
举报
回复
http://search.csdn.net/Expert/topic/1798/1798058.xml?temp=.5489618
http://search.csdn.net/Expert/topic/422/422381.xml?temp=.3967707
http://search.csdn.net/Expert/topic/471/471898.xml?temp=.4579431
自己搜索一下
CSDN论坛里有很多
程序员二进制计算器 v1.36
专为程序员打造的计算器,二进制运算强大,支持64位。 采用表达式驱动,输入表达式便即时显示结果,抛弃传统计算器繁琐的按钮,表达式可粘贴或回调重复使用。 支持二进制串直接运算,如0b1101 & 0b0011= 0b0001。 支持与、或、非、异或、移位(循环、逻辑、算术),直接读写二进制位,指定位段读、写、置1、清0、反转。 二进制数据表达方式多样,数据可以K、M、G等单位为后缀。 支持类C语言库函数调用。 结果可以各种进制、各种单位
输出
。 运算结果可存放在变量中。 内置常用生活函数。 总之,此计算器相当于解释执行的C语言表达式,但用起来更方便、更高效。 使用前请仔细阅读窗口内的帮助,便可成为开发工作中的好帮手。 [程序员二进制计算器 v1.36 帮助] 一 用法 在底部框中输入要计算的表达式,会即时显示计算结果,当无结果时说明表达式输入有误。 按回车键保存该次输入、清空输入框,并显示详细结果,包括可能有的错误信息。 在底部框中按键盘上、下箭头,可以调出历史输入。 当光标在结果框内时,按回车或TAB键可使光标跳至输入框。 二 特点 即时计算。 便捷的历史回调、复制、粘贴功能。 支持64位整型运算,整数有效范围为 -9223372036854775808 至 9223372036854774784。 三 数的表示 1-整型数表示法 如何表示二、八、十六进制整数: (1)二进制数 以0b或0B开头,后面的0、1数字之间可以用空格分隔。 0b1001 = 9 0b 1001 0110 = 0x96 = 1
50
0B1001 0110% = 1
50
% = 1.5 (2)八进制数 以0开头: 010 = 8 027 + 7 = 23 + 7 = 30 (3)十六进制数 以0x或0X开头: 0x10 = 16 -0XabEF * 2 = -44015 * 2 = -88030 2-浮点数表示法 (1)小数点前后的省略表示 3.14 3. = 3.0 .14 = 0.14 (2)用科学计数法表示浮点数 3e2 = 300 3e+2 = 300 3e-2 = 0.03 3.e2 = 300 3.e+2 = 300 3.14e-2 = 0.0314 .14e+2 = 14 3-字符型表示法 支持字符常量,字符型自动转换为整型(值为该字符的ASCII码),支持C/C++转义字符。 如何得到字符的ASCII码: 'a' = 97 'A' = 65 'a' + 3 = 100 'a' - 'A' = 32 '\''=39 '\"' = '"' = 34 '\? = '?' = 63 '\\' = 92 '\a' = 7 '\b' = 8 '\f' = 12 '\n' = 10 '\r' = 13 '\t' = 9 '\v' = 11 4-量词后缀表示 一个数的后面,可以跟有倍率运算符,表示该数乘以相应的倍数,例如: 2w = 20000 (2万) 13y = 1300000000 (13亿) 4k = 4096 3% = 0.03 (百分之3) 详见“倍率运算”部分。 三 运算结果的
输出
格式 1-指定方法 格式: [格式前缀] 表达式 表达式前面可带有“格式前缀”(可选的),用来指定运算结果的
输出
格式。 “格式前缀”与C/C++的printf函数基本相同,但不支持%s或%S。 当省略格式前缀时,默认按%g方式
输出
。此时对较小的数按原样
输出
,较大的数按科学计数法
输出
。 2-整型的
输出
格式 当按二、八、十六进制
输出
时,是按其补码形式
输出
,最高位是符号位(正数为0、负数为1)。 所以此法可得到一个负数的补码表示。 (1)按二进制
输出
%b或%B %b等价与%B。 %b 12 = 0b1100 %b 0xffffffff = 0b1111 1111 1111 1111 1111 1111 1111 1111 (2)按八进制
输出
%o或%O %o等价与%O。 %o 10 = 012 (3)按十进制
输出
%d 对于整型值,默认按十进制
输出
,此时%d可省略。 %d 123456789 = 123456789 (4)按十六进制
输出
%x或%X 用%x时,字母abcdef
输出
为小写,用%X时,字母abcdef
输出
为大写。 %x 31 = 0x1f %X 31 = 0X1F (5)
输出
前的类型转换 对于浮点型值,用以上4种格式时,会先取整,再
输出
,因此它们可起到对结果取整的作用。 %d 12345.6789 = 12345 %d -12345.6789 = -12345 3-浮点型的
输出
格式 (1)按精简方式
输出
%g %g是默认的
输出
格式(可省略),此时不
输出
无意义的0,当数较大时自动按科学计数法
输出
。 %g 314 = 314 %g 3.14000 = 3.14 %g 3.14 * 2 = 6.28 %g 1234567 = 1.23457e+006 (2)按全部位数
输出
%f %f
输出
全部位,包括多余的0: %f 3.14 * 2 = 6.280000 (3)如何指定小数点后保留位数 %m.nf 格式:%m.nf 其中,m和n都是整数,m指定总位数,n指定小数点后保留几位,如果m或n不足,则按实际位数
输出
。 例1:指定小数点后保留2位,其余位四舍五入: %.2f 3.14159 = 3.14 例2:指定全部5位,且小数点后保留3位,其余位四舍五入: %5.3f 3.14159 = 3.142 4-字符型的
输出
格式 %c或%C 如何得到ASCII值对应的字符(ASCII值转换为字符): 用%c,使结果(仅支持整型值)按字符形式
输出
即可。 %c 65 = 'A' %C 100-3 = 'a' 5-智能大小
输出
格式 用于将一个较大或较小的、不易读的数,自动转换为易读的单位
输出
。 (1)以K、M、G、T、P、E为单位
输出
%sz %sz对结果按1024为单位换算,用于快速计算磁盘文件的大小(sz是size的简写): 当结果=1K且=1M且=1G且=1T且=1P且=1E时,以E为单位
输出
,例如: %sz 10000000000000000000 = 8.673617E (2)以W(万)、Y(亿)、WY(万亿)、YY(亿亿)、WYY(万亿亿)、YYY(亿亿亿)为单位
输出
%num %num对结果以万、亿等为单位
输出
,用于便捷得到一个
大数
的值,格式符合中国人的习惯: 当结果=1万且=1亿且=1万亿且=1亿亿且=1万亿亿且=1亿亿亿时,以亿亿亿为单位
输出
,例如: 围棋盘第1格放1粒米,以后每格放前一格2倍的米,一共需要多少粒米: %num 2**(18*18) = 3.41758e+073YYY (3)以kilo(千)、mil(百万)、bil(十亿)、tril(万亿)为单位
输出
%val %val对结果按1000为倍率单位
输出
,用于便捷得到一个
大数
的值: 当结果=1千且=1百万且=十亿且=1万亿时,以万亿为单位
输出
,例如: %val 519322y = 51.9322tril (2012年国内生产总值,y是后缀运算符,表示前值乘以1亿) 6-固定比例
输出
格式 (1)按百分比
输出
%2 %2将结果按百分比格式
输出
,例如: 对1
50
种食品进行抽查,仅105种合格,合格率是多少: %2 105/1
50
= 70% (2)按万分比
输出
%4 %4将结果按万分比格式
输出
,例如: %4 0.00314 = 31.4%% 四 运算符与函数 1-运算符与分类 所有运算符,一律不区分大小写。 (1)一元运算符 只有1个操作数的运算符。 如果操作数是一个常数,它不需要用括号括起,并且与运算符之间不需要空格分隔,如: sqr2 = 1.41421 cos0 = 1 当操作数是表达式时,需要用括号括起,以划分优先级: sqr(1 + 2) = 1.73205 当操作数是一个内置常量时,它与运算符之间要有空格分隔: cos pi = -1 对少数一元运算符,按书写习惯放在了操作数的后面,如阶乘!和百分比% 3! = 6 3% = 0.03 (2)二元运算符 需要2个操作数的运算符,如+ - * /。 (3)三元运算符 需要3个操作数的运算符,如条件运算符 ?: 。 2-内置函数 调用格式:函数名(参数1, 参数2, ...) 其中,所有函数名不区分大小写。 函数名后是用一对括号括起的参数列表,各参数间用逗号分隔。 每个参数可以是一个数值,也可以是复杂表达式。 参数个数必须符合该函数的定义,部分函数支持无穷多个参数(sum, ave, max, min)。 整个函数调用又是个表达式(值为函数的返回值),又可以参与构成其它表达式。 五 基本运算 1-四则运算 (1)加 + 3 + 2 = 5 (2)减 - 3 - 2 = 1 (3)乘 * 3 * 2 = 6 (4)除 / 除数不能为0。 3 / 2 = 1.5 (5)求余 mod 除数不能为0,支持对浮点数求余。 5 mod 3 = 2 5.2 mod 3.1 = 2.1 6.28 mod 1.5 = 0.28 2-等比运算 格式为 a : b = c : ? 整个表达式的值为“使等式成立的问号处”的值。这里冒号的含义等于除号。 例子:商场里100元的衣服,打折后卖75元, 则另一件1
50
元的衣服,同样打折后卖多少? 写出表达式 100:75=1
50
:?,结果为112.5 3-取整 (1)下取整 floor 返回不大于x的最大整数: floor2.8 = 2 floor-2.8 = -3 (2)上取整 ceil 返回不小于x的最小整数: ceil2.8 = 3 ceil-2.8 = -2 4-求绝对值 abs abs-3.14 = 3.14 abs(3 - 5) = 2 5-求阶乘 ! 操作数不能小于0,或大于100。 3! = 6 (3!)! = 6! = 720 6-倍率运算 一个表达式的后面,可以跟有倍率运算符,表示该表达式的值乘以相应的倍数。 此法在表示一个
大数
或特定数时,可以减少书写量。 (1)存储单位后缀运算符 K M G T P E 4k = (480/120)k = 4*1024 = 4096 2m = (2k)k = 2*1024*1024 = 2097152 4g = (2+2)g = 4*1024*1024*1024 = 4294967296 1t = 1024*1024*1024*1024 = 1099511627776 1p = 1024*1024*1024*1024*1024 = 1125899906842624 1e = 1024*1024*1024*1024*1024*1024 = 1152921
50
4606847000 (2)数量后缀运算符一 w y wy yy wyy yyy 2w = 20000 (万) 13y = 1300000000 (亿) 1wy = (1w)y = 10000y = 1e+012 (万亿) 1yy = (1y)y = 1e+016 (亿亿) 1wyy = ( (1w) y )y = 1e+020 (万亿亿) 1yyy = ( (1y) y )y = 1e+024 (亿亿亿) (3)数量后缀运算符二 kilo mil bil tril 11.034kilo = 11.034 * 1000 = 11034 (千) 1.392mil = 1.392 * 100w = 1392000 (百万) 1.35382bil = 1.35382 * 10y = 1353821000 (十亿) 51.9322tril = 51.9322wy = 5.19322e+013 (万亿) (4)比率后缀运算符 % %% 求百分比 % 3% = 0.03 (
50
0%)% = 5% = 0.05
50
0% mod 3 = 5 mod 3 = 2 求万分比 %% 12345%% = (12345%)% = 123.45% = 1.2345 7-幂运算、指数运算 (1)求平方根 sqr sqr2 = 1.41421 sqr(1 + 2) = 1.73205 (2)求X的Y
次方
** 幂运算,支持浮点数: 4 ** 3 = 4 * 4 * 4 = 64 2.5 ** 1.5 = 3.95285 (3)求e的x
次方
exp exp1.5 = e ** 1.5 = 4.48169 8-对数运算 (1)求以2为底的对数 lg lg2 = 1, lg(2 * 2 * 2) = 3 (2)求以10为底的对数 ln ln10 = 1 ln(10 * 10) = 2 (3)求以e为底的对数 log log e = 1 log(e * e) = 2 9-取负 - -3.14 * -(1+2) = -3.14 * -3 = 9.42 5--3 = 5 - (-3) = 5 + 3 = 8 5--(-3) = 5 - (-(-3)) = 5 - 3 = 2 六 二进制运算 1-位与 & 0b1111 & 0b1001 = 15 & 9 = 0b1001 = 9 2-位或 | 0b1100 | 0b0011 = 12 | 3 = 0b1111 = 15 3-位取反 ~ ~( -2 ) = ~ 0b1111 1111 1111 1111 1111 1111 1111 1110 = 1 (32位版本) ~( -2 ) = ~ 0b1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110 = 1 (64位版本) 4-异或 ^ 0b1111 ^ 0b1001 = 15 ^ 9 = 0b0110 = 6 5-移位运算 (1)左移 << 0b0001 << 2 = 1 <> 0b1100 >> 2 = 12 >> 2 = 0b0011 = 3 注:这里是采用逻辑右移还是算术右移,由系统决定。 如果确定做逻辑右移,请用下面的rshl运算符;确定做算术右移,请用下面的rsha运算符。 (3)循环左移 rol 格式:data rol n 功能:返回整型值data循环左移n位后的结果。 例子:%x 0x80000000 rol 2 = 0x2 (32位版本) %x 0x8000000000000000 rol 2 = 0x2 (64位版本) (4)循环右移 ror 格式:data ror n 功能:返回整型值data逻辑循环右移n位后的结果。 例子:%x 0xf ror 8 = 0x0f000000 (32位版本) %x 0xf ror 8 = 0x0f00000000000000 (64位版本) (5)逻辑右移 rshl 格式:data rshl n 功能:无论当前系统采用何种形式的右移,返回整型值data逻辑右移n位后的结果。 逻辑右移是指,当右移n位时,高n位全补0(不考虑符号位)。 例子:%x 0xf0000000 rshl 4 = 0x0f000000 (6)算术右移 rsha 格式:data rsha n 功能:无论当前系统采用何种形式的右移,返回整型值data算术右移n位后的结果。 算术右移是指,如果符号位为1,则右移n位时,高n位全补1,否则全补0。 例子:%x 0x80000000 rsha 8 = 0xff800000 (32位版本) %x 0x70000000 rsha 4 = 0x70000000 (32位版本) %x 0x8000000000000000 rsha 8 = 0xff80000000000000 (64位版本) %x 0x7000000000000000 rsha 4 = 0x700000000000000 (64位版本) 6-二进制运算函数 (1)读二进位函数 rb 格式:rb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),连续取出其高位的length位的值,返回该值。 例子:%b rb(0b1010 0101, 4, 2) = 0b10 (2)写二进位函数 wb 格式:wb(data, start, length, value) 功能:对整型值data,将其中start位开始(位数从0开始计)、其后连续的的length位的值改写为value,返回修改后的data值。 例子:%b wb(0b1010 0000, 4, 4, 0b1111) = 0b1111 0000 (3)指定位置1函数 setb 格式:setb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),其后连续的length位全部置1,返回修改后的data值。 例子:%x setb(0x0, 8, 16) = 0x00ffff00 (4)指定位清0函数 rstb 格式:rstb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),其后连续的length位全部置0,返回修改后的data值。 例子:%x rstb(0xffffffff, 8, 16) = 0xff0000ff (5)指定位反转函数 rvsb 格式:rvsb(data, start, length) 功能:对整型值data,从低位的start位开始(位数从0开始计),其后连续的length位全部反转,返回修改后的data值。 例子:%x rvsb(0x0, 8, 16) = 0x00ffff00 七 逻辑运算 支持6种关系运算,和3种逻辑运算,以及C/C++条件运算。 当逻辑结果为真时,结果为整型值1;当逻辑结果为假时,结果为整型值0。 1-关系运算 (1)大于 > 1+2 > 3+4 = (1+2) > (3+4) = 0 (2)大于等于 >= 3.14*2 >= 6.28 = 1 (3)小于 < 1+2 < 3+4 = (1+2) < (3+4) = 1 (4)小于等于 <= 3.14*2 <= 6.28 = 1 (5)等于 == 3.14*2 == 6.28 = 1 (6)不等于 != 3.14*2 != 6.28 = 0 2-逻辑运算 (1)逻辑与 && 1<2 && 3<5 = (1<2) && (3<5) = 1 1<2 && 32 || 3>3 = 0 1>2 || 3>=3 = 1 (3)逻辑非 ! !0 = 1 !1 = 0 !(-3.14) = 0 3-条件运算 ? : 格式:表达式1 ? 表达式2 : 表达式3 结果:当表达式1为真时,整个表达式的结果等于表达式2,否则结果等于表达式3。 例子:1+2>3+4 ? 1+2 : 3+4 = 7 sqr(1+2<3+4 ? 1+2 : 3+4) = sqr(1+2) = 1.73205 4-逻辑结果值 逻辑结果值(0或1)又可作为整数参与其它运算。 (-3<5) + 2 = 1 + 2 = 3 1<2<3 = (1<2)<3 = 0e ? pi : e (得到常量pi和e中的大者) myave = ave(65, 78, 84.5, 96) (求几个数的平均值,myave = 80.875) 对已定义的变量可以再次赋值,这时原值丢失,保存新值。 引用未定义的变量时会报错。 2-赋值表达式 赋值运算本又是个表达式,即赋值表达式。 整个赋值表达式的值,为=号右部表达式的值,例如 a = (b = 5) (此时变量a和b的值都等于5) 采用此法可以一次性定义多个变量。 3-内置的常量 以下内置常量可以直接使用,常量名不区分大小写。 不能对常量重新赋值,否则会报错。 e = 2.718281828459 (自然对数的底) gold = 0.61803398874989484820 (黄金分割比率) inch = 2.54 (1英寸等于几厘米) kv = 273.15 (开氏温度 = 摄氏温度 + 273.15) nmi = 1.852 (1海里等于几公里) pi = 3.1415926535898 (圆周率) 十二 运算符的优先级 1-优先级顺序 运算符按优先级划分为如下14组,各个组的优先级由高到低,同一组内的优先级相同。 不清楚优先级时,请用使用括号。 (1) -(取负) !(逻辑非) ~(位取反) %(百分比) %%(万分比) !(阶乘) K M G T P E(存储单位后缀) w y wy yy wyy yyy kilo mil bil tril(数量后缀) id(arg1, arg2, ...)(函数调用) (2) abs ceil floor lg ln log exp sqr rtd dtr sin cos tan ctan asin acos atan sinh cosh tanh intcm cmtin nmtkm kmtnm lbtkg kgtlb ftc ctf ktc ctk (3) * / mod(求余) **(幂运算) (4) + - (5) <> rshl rsha rol ror (6) > >= < <= (7) == != (8) & (按位与) (9) ^ (按位异或) (10) | (按位或) (11) && (逻辑与) (12) || (逻辑或) (13) ?: (条件运算) :=:? (等比运算) (14) = (赋值运算) 2-用括号指定运算顺序 1 + 2 * 3 = 1 + (2 * 3) = 7 (1 + 2) * 3 = 9 1 * (2 + 3) = 5 author: huyansoft
算法面试题
在一个二位数组中,每一行都按照从左到右 递增的顺序排序,每一列都按照从上到下递增的顺 序排序。输入一个链表的头结点,从尾到头反过来打 印出每个结点的值。 输入某二叉树的前序遍历和中心遍历的结 果,请重建该二叉树。:实现函数double Power(double base,int exponent),求base的exponent
次方
。不得使用库 函数,同时不需要考虑
大数
问题
。:请实现一个函数,输入一个整数,
输出
该数二进制表示中1的个数。:给定单向链表的头指针和一个结点指针,定 义一个函数在O(1)时间删除该结点。:定义一个函数,输入一个链表的头结点,反转该链表并
输出
反转后链表
快速幂取模,
大数
幂次求模,a^p%m
本函数输入a,p,m,结果
输出
为a的p
次方
对m求模的结果。
c# 阶乘完整代码
功能: 本程序实现的是
大数
的阶乘,设计一个类calculate(),类中包含 求该
大数
的阶乘的算法,初始化存储结果的数组,计算
大数
的阶乘的算 法。该程序的编程思想是因为
大数
求得阶乘后的数字太大,占据的空间 很大,所以必须利用数组来存储所得的结果,这样就必须确定所得的结 果所占的数组位数,本程序采用的是n!=10的m
次方
,数组的位数即为大 于m的最小整数,数组的位数确定后,初始化数组令数组的第一个空间的 值为1,其他的均为0,将所得的结果一位一位的存进数组,倒序
输出
所 得的结果。
大数
值:bigInteger---2^64
次方
问: 如果基本的整数和浮点数精度不能够满足需求,可以使用java.math包中的两个类:BigInteger和BigDecimal BigInteger in=BigInteger.valueOf(2); 或者 BigInteger in=new BigInteger("2"); 将in变量的值设为2 然后再计算2^64 in=in.pow(64);//乘方 in=...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章