em làm code trừ 2 số nguyên lớn trong chuỗi mà hổng ra kết quả như ý muốn
#include<stdio.h>
#include<conio.h>
#include<string.h>
// thêm kí tự về vào chuỗi
void them_ki_tu(char s[], char vtt, char ktt) {
for (int i = strlen(s) - 1; i >= vtt; i--) {
s[i + 1] = s[i];
}
s[strlen(s) + 1] = '\0';
s[vtt] = ktt;
}
// đồng nhất độ dài của 2 chuỗi
void dong_nhat(char s[], char s1[]) {
// nếu chuỗi s > s1 thì lấy chuỗi s - s1, và thêm kí tự 0 vào chuỗi ngắn nhất
if (strlen(s) > strlen(s1)) {
int do_dai = strlen(s) - strlen(s1);
for (int i = 0; i < do_dai; i++) {
// thêm kí tự vào đầu mảng
them_ki_tu(s1, 0, '0');
}
}
else if (strlen(s1) > strlen(s)) {
int do_dai = strlen(s1) - strlen(s);
for (int i = 0; i < do_dai; i++) {
// thêm kí tự 0 vào đầu mảng
them_ki_tu(s, 0, '0');
}
}
}
// trừ 2 chuỗi
char* tru_2_chuoi(char s[], char s1[],char hieu[]) {
dong_nhat(s, s1);
int ket_qua = 0;
int chi_so = 0;
int nho = 0;
// duyệt từ cuối chuỗi về đầu chuỗi
for (int i = strlen(s) - 1; i >= 0; i--) {
if (s[i] > s1[i]) {
// chuyển kí tự số thành số nguyên
ket_qua = (s[i] - 48) - (s1[i] - 48);
// đồi số nguyên ra chuỗi số
hieu[chi_so] = ket_qua + 48;
chi_so++;
}
else {
ket_qua = (s[i] - 48) - (s1[i] - 48) + 10;
s1[i - 1] += 1;
hieu[chi_so] = ket_qua + 48;
chi_so++;
}
}
hieu[chi_so] = '\0';
return hieu;
}
int main() {
char s[50] = "2";
char s1[50] = "4";
char hieu[100];
printf_s("\nTru 2 chuoi so: %s", _strrev(tru_2_chuoi(s, s1, hieu)));
_getch();
return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?