1.编写一个程序,实现很长(非常长)整数的相加。(要求用字符数组的有关知识去写)
2.编写一个程序,比较两个字符串的大小。(不可用strcmp等函数直接比较)
參考答案:#include <string.h>
// 声明
void add(const char *var1, const char *var2, char *result);
int cmp(const char *str1, const char *str2);
main()
{
// 测试用例
char var1[] = "***********";
char var2[] = "***********";
char result[128];
add(var1, var2, result);
printf(result);
printf("\n");
int ret = cmp(var1, var2);
printf("%d", ret);
}
// 实现字符大数相加,用result返回结果
// var1第一个被加数的字符串
// var2第二个被加数的字符串
// result用于返回结果的字符缓冲区
void add(const char *var1, const char *var2, char *result) {
int len1 = strlen(var1);
int len2 = strlen(var2);
int maxLen = len1 > len2 ? len1 : len2; // 两个数中最大的长度
int carry = 0; // 进位数
// 从后向前计算
for (int i = 0; i < maxLen; ++i) {
int v1 = 0;
int v2 = 0;
if (len1 - i - 1 >= 0) {
v1 = var1[len1 - i - 1] - 0x30;
}
if (len2 - i - 1 >= 0) {
v2 = var2[len2 - i - 1] - 0x30;
}
result[maxLen - i] = v1 + v2 + carry;
carry = result[maxLen - i] / 10; // 计算进位
result[maxLen - i] = result[maxLen - i] % 10 + 0x30;
}
if (carry > 0) {
result[0] = carry + 0x30;
} else {
result[0] = 0x20;
}
result[maxLen + 1] = 0;
}
// 返回 > 0 表示第一个字符串大
// 返回 == 0 表示两个字符串相等
// 返回 < 0 表示第二个字符串大
int cmp(const char *str1, const char *str2) {
int i = 0;
while (str1[i] && str2[i] && str1[i] == str2[i]) {
++i;
}
return str1[i] - str2[i];
}