当求一个较大的数的阶乘时,例如100,由于其最终结果的数位极大,所以我们难以用正常的类型来表示出结果。所以我们可以考虑使用数组来储存该数据,最终达到储存的目的。
#include<iostream>//此代码可以用于求大数的阶乘时使用
using namespace std;
void factorial(int n)
{
int arr[64];
int t = n;
arr[0] = 1;
int length = 1;
int jinwei, temp;
for (int m = n; m > 1; m--)
{
int i = 0, jinwei = 0;
for (i = 0; i < length; i++)
{
temp = arr[i] * m + jinwei;
arr[i] = temp % 10000;
jinwei = temp / 10000;
}
arr[i]=jinwei;
if (jinwei > 0)
{
length++;
}
}
cout << arr[length - 1];
for (int i = length - 2; i > 0; i--)
{
cout << arr[i];
}
}
int main()
{
int n;
cin >> n;
factorial(n);
return 0;
}
该代码中,以10000为分界线来将结果分解,原因是因为100*100=10000,所以100以内的两个数相乘时,不会高于10000.
修改版:
#include<iostream>
#include<string>
#define MAX_SIZE 100
//int arr[] = { 0 };
using namespace std;
int main()
{
int arr[64] = { 0 };
int n;
cin >> n;
arr[0] = n;
int jinwei = 0;
int temp = 0;
int length = 1;
for (int i = n-1; i > 0; i--)
{
for (int m = 0; m < length; m++)
{
temp = arr[m] * i + jinwei;
arr[m] = temp % 10;
jinwei = temp / 10;
}
if (jinwei)
{
length++;
arr[length - 1] = jinwei;
}
}
for (int m = length - 1; m >= 0; m--)
{
cout << arr[m] << endl;
}
return 0;
}
分别将两个链表的值加起来,输出。
#include<iostream>
#define MAXSIZE 100
typedef int ElemType;
typedef int state;
using namespace std;
typedef struct LNode
{
ElemType data;
struct LNode* Next;
}*LinkNode;
state InitLNode(LinkNode *p)
{
if (p == NULL)
{
return 0;
}
*p = (LinkNode)malloc(sizeof(LNode));
(*p)->Next = NULL;
}
state CreatLinklist(LinkNode *p)
{
*p = (LinkNode)malloc(sizeof(LNode));
(*p)->Next = NULL;
int m;
cin >> m;
while (m!=00)
{
LinkNode L = (LinkNode)malloc(sizeof(LNode));
L->data = m;
L->Next = (*p)->Next;
(*p)->Next = L;
cin >> m;
}
return 1;
}
state printf(LinkNode p)
{
LinkNode T;//因为p有头结点,所以要将头结点排除
T = p->Next;
int i = 1;
while (T)
{
cout << T->data<<endl;
T = T->Next;
}
return 1;
}
void act(LinkNode a, LinkNode b)
{
LinkNode T;//因为p有头结点,所以要将头结点排除
T = a->Next;
LinkNode x;//因为p有头结点,所以要将头结点排除
x = b->Next;
while (T && x)
{
cout << T->data + x->data << endl;
T = T->Next;
x = x->Next;
}
while (T)
{
cout << T->data << endl;
T = T->Next;
}
while (x)
{
cout << x->data << endl;
x = x->Next;
}
}
void addLinkNode(LinkNode a,LinkNode b,LinkNode *c)
{
a = a->Next;
b = b->Next;
while (a->data && b->data)
{
LinkNode M;
M = (LinkNode)malloc(sizeof(LNode));
M->data = a->data + b->data;
M->Next = (*c)->Next;
*c = M;
a = a->Next;
b = b->Next;
}
if (a->Next!=NULL)
{
(*c)->data = a->data;
(*c) = (*c)->Next;
a = (*c)->Next;
}
if (b->Next!=NULL)
{
(*c)->data = b->data;
(*c) = (*c)->Next;
b = b->Next;
}
}
int main()
{
LinkNode a, b, p;
InitLNode(&p);
InitLNode(&a);
CreatLinklist(&a);
InitLNode(&b);
CreatLinklist(&b);
//printf(a);
act(a, b);
return 0;
}