本文共 2681 字,大约阅读时间需要 8 分钟。
1、实现大整数加法(要考虑正负数的情况)
//备注:负数的加法设计逻辑未实现#define _CRT_SECURE_NO_WARNINGS#include#include 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#include 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;}
转载地址:http://uxxmb.baihongyu.com/