逛奔的蜗牛
我不聪明,但我会很努力
:: ::
新随笔
:: :: ::
管理
::
随笔分类
C/C++(67)
(rss)
Cocoa(26)
(rss)
Java(186)
(rss)
Mac(126)
(rss)
OpenGL(25)
(rss)
Qt(164)
(rss)
Qt自定义Widget(12)
(rss)
Xcode(5)
(rss)
其他编程(94)
(rss)
设计模式(2)
(rss)
外语(4)
(rss)
网文(74)
(rss)
搜索
最新评论
1. re: Java:用 Java 7 运行 IDEA 13
great post
--contact form
C/C++: 求1! + 2! + ... + n!
#include
<
iostream
>
#include
<
cstdlib
>
const
unsigned
int
MAX_ELEMENT_VALUE_PLUS_1
=
10000
;
const
unsigned
int
BITS_MAX_ELEMENT_VALUE
=
4
;
/**
* 求出数组中从左到右中第一个不为0的元素的下标
*/
size_t posOfFirstNoZero(unsigned
int
*
array, size_t length) {
size_t pos
=
0
;
for
(size_t i
=
0
; i
<
length; i
++
) {
if
(array[i]
!=
0
) {
pos
=
i;
break
;
}
}
return
pos;
}
/**
* 数与大数相乘, 大数放在一个数组中
*/
void
multiply(unsigned
int
*
array, unsigned
int
num, size_t length) {
unsigned
int
carry
=
0
;
unsigned
int
temp
=
0
;
//
求出第一个非0元素的下标,
//
由于相乘可能会进位, 所以可能会使用到第一个非0元素的前一个元素.
size_t end
=
posOfFirstNoZero(array, length);
for
(size_t index
=
length
-
1
; index
>=
end
-
1
; index
--
) {
temp
=
array[index]
*
num
+
carry;
array[index]
=
temp
%
MAX_ELEMENT_VALUE_PLUS_1;
carry
=
temp
/
MAX_ELEMENT_VALUE_PLUS_1;
//
否则, 当index为0时, 因为是unsigned int, 所以index--结果为最大正数
//
会造成死循环, 这种情况下end - 1为0.
if
(index
==
0
) {
break
;
}
}
}
/**
* 打印出大数
*/
void
print(unsigned
int
*
array, size_t length) {
//
数组从左到右中第一个不为0的元素的下标
size_t start
=
posOfFirstNoZero(array, length);
for
(size_t i
=
start; i
<
length; i
++
) {
int
temp
=
array[i];
int
bits
=
0
;
//
求出数组中每个元素的位数
while
(temp
!=
0
) {
++
bits;
temp
/=
10
;
}
//
如果一个数的位数不足BITS_MAX_ELEMENT_VALUEU位, 这个数的前面用0补足.
for
(size_t j
=
0
; j
<
BITS_MAX_ELEMENT_VALUE
-
bits; j
++
) {
std::cout
<<
0
;
}
if
(bits
!=
0
) {
std::cout
<<
array[i]
<<
"
"
;
}
else
{
std::cout
<<
"
"
;
}
}
}
int
main(
int
argc,
char
*
argv[]) {
const
size_t length
=
2
;
unsigned
int
result[length]
=
{
0
};
result[length
-
1
]
=
1
;
unsigned
int
n;
std::cout
<<
"
Calculate 1! + 2! + 3! +
+ n!
"
<<
std::endl;
std::cout
<<
"
Please input a positive number: n =
"
;
std::cin
>>
n;
//
计算阶乘
for
(unsigned
int
i
=
1
; i
<=
n; i
++
) {
multiply(result, i, length);
print(result, length);
std::cout
<<
std::endl;
}
size_t start
=
posOfFirstNoZero(result, length);
std::cout
<<
"
数组中还有
"
<<
start
<<
"
个空位
"
<<
std::endl;
return
EXIT_SUCCESS;
}
posted on 2008-03-18 15:30
逛奔的蜗牛
阅读(907)
评论(0)
编辑
收藏
引用
所属分类:
C/C++
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Qt:FontMetrics
C:函数指针数组的定义
Qt:解读Q_GLOBAL_STATIC(QFontDatabasePrivate, privateDb)
C++:QT插件开发方式
C++:单例 Singleton
OpenGL:展示OpenGL特性的软件Tutors
C++:LIB和DLL的区别与使用
C++:C++ 的指针和句柄
其他编程:版本控制入门简介
C++:位操作基础篇之位操作全面总结
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 逛奔的蜗牛