1、实现大整数加法(要考虑正负数的情况)
//备注:负数的加法设计逻辑未实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void reserve_str(int* str, int len);
void add_big_int(int* a, int* b, int len1, int len2) {
int k = 0, t = 0;
int count = 0; //记录计算结果数字的位数
if (len1 > len2) { //第一个数长度大于第二个数
while (t <= len1 - 1) {
k = a[t] + b[t];
if (k < 10) {
a[t] = a[t] + b[t];
}
else {
a[t] = k % 10;
a[t + 1] = a[t + 1] + (k - a[t]) / 10;
}
t++;
}
if (a[t] != 0 && a[t] > 0) {
count = t + 1;
}
else {
count = t;
}
}
else {
while (t <= len2 - 1) {
k = a[t] + b[t];
if (k < 10) {
a[t] = a[t] + b[t];
}
else {
a[t] = k % 10;
a[t + 1] = a[t + 1] + (k - a[t]) / 10;
}
t++;
}
if (a[t] != 0 && a[t] > 0) {
count = t + 1;
}
else {
count = t;
}
}
printf("超大数字A和B的和为:\n");
count--;
while (count >= 0) {
printf("%d", a[count]);
count--;
}
printf("\n");
}
void reserve_str(int* str, int len) {
int start = 0;
char c = 0;
while (start < len) {
c = str[start];
str[start] = str[len - 1];
str[len - 1] = c;
start++;
len--;
}
return;
}
int main() {
int c[100] = { 0 };
int a[100] = { 0 };
char data;
int i = 0, j = 0;
printf("请输入一个超大数字A(超过50个字节):\n");
while ((data = getchar()) != '\n'){
c[i++] = data - 48;
}
reserve_str(c, i);
printf("请输入一个超大数字B(超过50个字节):\n");
while ((data = getchar()) != '\n') {
a[j++] = data - 48;
}
reserve_str(a, j);
add_big_int(c, a, i, j);
return 0;
}
2、使用数组指针和二级指针分别实现字符串数组的排序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void sort1(char(*p1)[10], int num) //用数组指针的方法
{
for (int i = num - 1; i >= 1; --i) //冒泡排序法,排列出字符串的大小
{
for (int j = 0; j < i; ++j) //每次将排序序列最大的字符串放在最后一位
{
if (strcmp(p1[j], p1[j + 1]) > 0) //如果p1[j]的字符串长度大于p1[j+1],则进行字符串地址的交换
{
char Tmp[10];
strcpy(Tmp, p1[j]);
strcpy(p1[j], p1[j + 1]);
strcpy(p1[j + 1], Tmp);
}
}
}
for (int i = 0; i < num; ++i)
{
puts(p1[i]);
}
}
void sort2(char** p2, int num) //用二级指针的方法
{
for (int i = num - 1; i >= 1; --i)
{
for (int j = 0; j < i; ++j)
{
if (strcmp(p2[j], p2[j + 1]) > 0)
{
char* Tmp = p2[j];
p2[j] = p2[j + 1];
p2[j + 1] = Tmp;
}
}
}
for (int i = 0; i < num; ++i)
{
puts(p2[i]);
}
}
int main()
{
char arr[5][10] = { "wwwwwww", "aaaaaaaa", "ffffffff", "eeeeeeeee", "yyyyyyyy" };
sort1(arr, 5);
char* p[5] = { "wwwwwww", "aaaaaaaa", "ffffffff", "eeeeeeeee", "yyyyyyyy" }; //二级指针参数位置传入指针数组的地址
for (int i = 0; i < 5; ++i) {
p[i] = arr[i]; //p[i]中的每个p值都是每个字符串的首地址
}
sort2(p, 5);
return 0;
}