朝花夕拾,根据印象重新写的,先贴一个整数的加法运算
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int bool;
#define false (-1)
#define true (0)
static bool char_check(char c) {
if (c > '9') {
return false;
}
if (c < '0') {
return false;
}
return true;
}
static bool str_check(const char* src) {
for ( ; *src; src++) {
if (false == char_check(*src)) {
return false;
}
}
return true;
}
static void str_reverse(char* s) {
char temp;
char* r = s + strlen(s) - 1;
while (s < r) {
temp = *s;
*s++ = *r;
*r-- = temp;
}
}
static bool char_add(char a, char b, char* c, char* d) {
if (false == char_check(a)) {
return false;
}
if (false == char_check(b)) {
return false;
}
a -= '0';
b -= '0';
*d = a + b + (*c);
if (*d > 9) {
*d -= 10;
*c = 1;
}
else {
*c = 0;
}
*d += '0';
return true;
}
static bool str_add(const char* a, const char* b, char* d) {
char aa, bb, c = 0;
int len_a = strlen(a), len_b = strlen(b);
char* p_a = a + len_a - 1;
char* p_b = b + len_b - 1;
char* p_d = d;
if (false == str_check(a)) {
return false;
}
if (false == str_check(b)) {
return false;
}
for ( ; (len_a > 0) || (len_b > 0); ) {
aa = len_a > 0? *p_a-- : '0';
bb = len_b > 0? *p_b-- : '0';
char_add(aa, bb, &c, p_d++);
len_a--;
len_b--;
}
str_reverse(d);
return true;
}
int main()
{
char* a = "16664129129421912941294";
char* b = "34666666666543854397591";
char c[100] = "";
str_add(a, b, c);
printf("%s!\n", c);
return 0;
}
离线
哈,这个不错,可以多少位十进制数,有没有限制?
基于字符串的运算,跟小学时候的手算是一个思路,无位数限制,就是运算速度慢点
离线
感谢楼上两位对小站的支持!
今年转战你的论坛,希望你的论坛越办越好
离线
感谢楼上两位对小站的支持!
不过论坛好像对贴图支持不太好啊,有些不方便
离线
离线