下面是源代码,但是有好多bug,但是实在找不到
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int max(a, b)
{
if (a > b) return a;
else return b;
}
int min(a, b)
{
if (a < b) return a;
else return b;
}
void tidy(char* s1, char* s2,int *s1_4,int *s2_4,int j1,int j2)
{
int i;
j1 = j2 = 0;
//转换为4位整数组
for (i = 0; i < 100; i += 4)
{
s1_4[j1] = ((int)s1[i] - 48) * 1000 + ((int)s1[i + 1] - 48) * 100 + ((int)s1[i + 2] - 48) * 10 + ((int)s1[i + 3] - 48);
if (s1_4[j1] == 0)
break;
j1++;
}
for (i = 0; i < 100; i += 4)
{
s2_4[j2] = ((int)s2[i] - 48) * 1000 + ((int)s2[i + 1] - 48) * 100 + ((int)s2[i + 2] - 48) * 10 + ((int)s2[i + 3] - 48);
if (s1_4[j1] == 0)
break;
j2++;
}
//数组反序,实现数位对齐
int start = 0, end1 = j1, end2 = j2;
int temp;
while (start < end1)
{
temp = s1_4[end1];
s1_4[end1] = s1_4[start];
s1_4[start] = temp;
start++;
end1--;
}
start = 0;
while (start < end2)
{
temp = s1_4[end1];
s1_4[end1] = s1_4[start];
s1_4[start] = temp;
start++;
end1--;
}
}
void main()
{
int j1 = 0, j2 = 0;
int s1_4[25], s2_4[25];
int i;
char s1[100], s2[100];
memset(s1, '0', sizeof(s1));
memset(s2, '0', sizeof(s2));
printf("输入两个大整数,回车结束:");
gets(s1);
gets(s2);
tidy(s1, s2, s1_4, s2_4, j1, j2);
printf("\nresult:\n");
for (i = 0; i < j1; i++)
{
printf("%d", s1_4[i]);
}
printf("\n");
for (i = 0; i < j2; i++)
{
printf("%d", s2_4[i]);
}
}
void tidy(char *s, int *s_4, int *j) //按4位转换成整数,对齐没看明白。
{
int i;
*j = 0;
//转换为4位整数组
int len = strlen(s);
for(i = 0; i < len; i++)
{
s_4[*j] = s_4[*j] * 10 + (s[i] - '0');
if((i+1) % 4 == 0)
(*j)++;
}
if(s_4[*j]!=0)(*j)++;
}
int main()
{
int i, j1 = 0, j2 = 0;
int s1_4[25]= {0}, s2_4[25]= {0};
char s1[100]= {0}, s2[100]= {0};
//memset(s1, '0', sizeof(s1));
//memset(s2, '0', sizeof(s2));
printf("输入两个大整数,回车结束:\n");
gets(s1);
gets(s2);
//tidy2(s1, s2, s1_4, s2_4, &j1, &j2);//参数在函数里修改后把值带回来,需要用指针。
tidy(s1, s1_4, &j1);
tidy(s2, s2_4, &j2);
printf("\nresult:\n");
for(i = 0; i < j1; i++)
{
printf("%d ", s1_4[i]);
}
printf("\n");
for(i = 0; i < j2; i++)
{
printf("%d ", s2_4[i]);
}
return 0;
}
你的代码修改如下,修改位置有标注:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int max(a, b)
{
if (a > b) return a;
else return b;
}
int min(a, b)
{
if (a < b) return a;
else return b;
}
void tidy(char* s1, char* s2, int* s1_4, int* s2_4, int *j1, int *j2)
{
int i;
//j1 = j2 = 0;
//转换为4位整数组
for (i = 0; i < strlen(s1); i += 4) //使用strlen(s1)获取数组长度
{
s1_4[*j1] = ((int)s1[i] - 48) * 1000 + ((int)s1[i + 1] - 48) * 100 + ((int)s1[i + 2] - 48) * 10 + ((int)s1[i + 3] - 48);
if (s1_4[*j1] == 0)
break;
(*j1)++;
}
for (i = 0; i < strlen(s2); i += 4) //使用strlen(s1)获取数组长度
{
s2_4[*j2] = ((int)s2[i] - 48) * 1000 + ((int)s2[i + 1] - 48) * 100 + ((int)s2[i + 2] - 48) * 10 + ((int)s2[i + 3] - 48);
if (s1_4[*j1] == 0)
break;
(*j2)++;
}
//数组反序,实现数位对齐
int start = 0, end1 = *j1-1, end2 = *j2-1; //end=*j1-1,因为序号从0开始
int temp;
while (start < end1)
{
temp = s1_4[end1];
s1_4[end1] = s1_4[start];
s1_4[start] = temp;
start++;
end1--;
}
start = 0;
while (start < end2) //end1改成end2,s1_4改成s2_4
{
temp = s2_4[end2];
s2_4[end2] = s2_4[start];
s2_4[start] = temp;
start++;
end1--;
}
}
void main()
{
int j1 = 0, j2 = 0,*p1=&j1,*p2=&j2; //分别定义指针p1、p2指向j1、j2,并传入函数,否则执行完函数后,j1、j2还是等于0
int s1_4[25], s2_4[25];
int i;
char s1[100], s2[100];
memset(s1, '0', sizeof(s1));
memset(s2, '0', sizeof(s2));
printf("输入两个大整数,回车结束:");
gets(s1);
gets(s2);
tidy(s1, s2, s1_4, s2_4, p1, p2); //传入指针
printf("\nresult:\n");
for (i = 0; i < j1; i++)
{
printf("%d", s1_4[i]);
}
printf("\n");
for (i = 0; i < j2; i++)
{
printf("%d", s2_4[i]);
}
}