C语言,大数除法,不支持小数
2016-04-29 12:40
465 查看
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define N 1000
void Input(char number1[], char number2[], int n);//输入数据
void Change_str(char number[], int n);//数组前后互换
void Sub(char number1[], char number2[], char number3[]);//实现减法
int Compare(char number1[], char number2[]); //判断两个数的大小,大则返回0,小则返回1
void Clear_Zero(char number[]);
void Input(char number1[], char number2[], int n)//输入数据
{
scanf("%s%s", number1, number2);
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
if (length_n1 > n || length_n2 > n)
{
printf("ERROR:输入的数据超出范围!");
system("pause");
exit(1);
}
int flag = 0;
for (int i = 0; i < length_n2; i++)
{
if (number2[i] != '0')
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("ERROR:除数不能为0!");
system("pause");
exit(1);
}
}
void Change_str(char number[], int n)//数组前后互换
{
for (int i = 0; i < n / 2; i++)
{
char temp = number[i];
number[i] = number[n - i - 1];
number[n - i - 1] = temp;
}
}
void Clear_Zero(char number[]) //清理前方无用的0
{
int length = strlen(number);
int flag = 0;
int count = 0;
for (int i = 0; i < length; i++)
{
if (flag == 0)
{
if (number[i] == '0')
{
count++;
}
else
{
flag = 1;
}
}
}
if (count == length)
{
number[0] = '0';
number[1] = '\0';
}
else
{
for (int i = 0; i < length - count; i++)
{
number[i] = number[i + count];
}
number[length - count] = '\0';
}
}
void Sub(char number1[], char number2[], char number3[])//实现减法
{
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
Change_str(number1, length_n1);
Change_str(number2, length_n2);
int sub_number;
int one;
int ten = 0;
for (int i = 0; i < length_n2; i++)
{
if (ten == 0)
{
sub_number = (number1[i] - 48) - (number2[i] - 48);
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
}
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - (number2[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
for (int i = length_n2; i < length_n1; i++)
{
if (ten == 0)
{
number3[i] = number1[i];
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
number3[length_n1] = '\0';
Change_str(number3, length_n1);
Change_str(number2, length_n2);
}
int Compare(char number1[], char number2[]) //判断两个数的大小,大则返回0,小则返回1
{
int minus;//判断符号
char number3
;
char number4
;
strcpy(number3, number1);
strcpy(number4, number2);
Clear_Zero(number3);
Clear_Zero(number4);
int length_n1 = strlen(number3);
int length_n2 = strlen(number4);
if (length_n1 > length_n2)
{
minus = 0;
}
else if (length_n1 < length_n2)
{
minus = 1;
}
else
{
for (int i = 0; i <length_n1; i++)
{
if (number3[i] > number4[i])
{
minus = 0;
break;
}
else if (number3[i] < number4[i])
{
minus = 1;
break;
}
else
{
minus = 0;
}
}
}
return minus;
}
void Devide(char number1[], char number2[], char number3[]) //实现除法
{
char number4
;
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
int minus = Compare(number1, number2);
if (minus == 0)
{
for (int j = 0; j < length_n2; j++)
{
number4[j] = number1[j];
}
number4[length_n2] = '\0';
int count_n4 = length_n2;
for (int i = 0; i < (length_n1 - length_n2 + 1); i++)
{
//printf("%d\n", i);
int count = 0;
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number3[i] = count + 48;
number4[count_n4] = number1[count_n4];
count_n4++;
number4[count_n4] = '\0';
}
number3[length_n1 - length_n2 + 1] = '\0';
}
else
{
number3[0] = '0';
number3[1] = '\0';
}
}
void main()
{
char number1
;
char number2
;
char number3
;
Input(number1, number2, N);
Devide(number1, number2, number3);
Clear_Zero(number3);
printf("%s", number3);
system("pause");
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define N 1000
void Input(char number1[], char number2[], int n);//输入数据
void Change_str(char number[], int n);//数组前后互换
void Sub(char number1[], char number2[], char number3[]);//实现减法
int Compare(char number1[], char number2[]); //判断两个数的大小,大则返回0,小则返回1
void Clear_Zero(char number[]);
void Input(char number1[], char number2[], int n)//输入数据
{
scanf("%s%s", number1, number2);
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
if (length_n1 > n || length_n2 > n)
{
printf("ERROR:输入的数据超出范围!");
system("pause");
exit(1);
}
int flag = 0;
for (int i = 0; i < length_n2; i++)
{
if (number2[i] != '0')
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("ERROR:除数不能为0!");
system("pause");
exit(1);
}
}
void Change_str(char number[], int n)//数组前后互换
{
for (int i = 0; i < n / 2; i++)
{
char temp = number[i];
number[i] = number[n - i - 1];
number[n - i - 1] = temp;
}
}
void Clear_Zero(char number[]) //清理前方无用的0
{
int length = strlen(number);
int flag = 0;
int count = 0;
for (int i = 0; i < length; i++)
{
if (flag == 0)
{
if (number[i] == '0')
{
count++;
}
else
{
flag = 1;
}
}
}
if (count == length)
{
number[0] = '0';
number[1] = '\0';
}
else
{
for (int i = 0; i < length - count; i++)
{
number[i] = number[i + count];
}
number[length - count] = '\0';
}
}
void Sub(char number1[], char number2[], char number3[])//实现减法
{
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
Change_str(number1, length_n1);
Change_str(number2, length_n2);
int sub_number;
int one;
int ten = 0;
for (int i = 0; i < length_n2; i++)
{
if (ten == 0)
{
sub_number = (number1[i] - 48) - (number2[i] - 48);
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
}
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - (number2[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
for (int i = length_n2; i < length_n1; i++)
{
if (ten == 0)
{
number3[i] = number1[i];
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
number3[length_n1] = '\0';
Change_str(number3, length_n1);
Change_str(number2, length_n2);
}
int Compare(char number1[], char number2[]) //判断两个数的大小,大则返回0,小则返回1
{
int minus;//判断符号
char number3
;
char number4
;
strcpy(number3, number1);
strcpy(number4, number2);
Clear_Zero(number3);
Clear_Zero(number4);
int length_n1 = strlen(number3);
int length_n2 = strlen(number4);
if (length_n1 > length_n2)
{
minus = 0;
}
else if (length_n1 < length_n2)
{
minus = 1;
}
else
{
for (int i = 0; i <length_n1; i++)
{
if (number3[i] > number4[i])
{
minus = 0;
break;
}
else if (number3[i] < number4[i])
{
minus = 1;
break;
}
else
{
minus = 0;
}
}
}
return minus;
}
void Devide(char number1[], char number2[], char number3[]) //实现除法
{
char number4
;
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
int minus = Compare(number1, number2);
if (minus == 0)
{
for (int j = 0; j < length_n2; j++)
{
number4[j] = number1[j];
}
number4[length_n2] = '\0';
int count_n4 = length_n2;
for (int i = 0; i < (length_n1 - length_n2 + 1); i++)
{
//printf("%d\n", i);
int count = 0;
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number3[i] = count + 48;
number4[count_n4] = number1[count_n4];
count_n4++;
number4[count_n4] = '\0';
}
number3[length_n1 - length_n2 + 1] = '\0';
}
else
{
number3[0] = '0';
number3[1] = '\0';
}
}
void main()
{
char number1
;
char number2
;
char number3
;
Input(number1, number2, N);
Devide(number1, number2, number3);
Clear_Zero(number3);
printf("%s", number3);
system("pause");
}
相关文章推荐
- C++11线程,亲合与超线程
- c语言学习基础:[1]开发工具介绍
- C语言结构位域
- 贪吃蛇项目总结
- OpenCV2.4.10之samples_cpp_tutorial-code_learn-----ml(SVM支持向量机一)
- C++单例模式
- 【转】浅析C语言的非局部跳转:setjmp和longjmp
- C/C++之回调函数
- C++中使用new最好要显示调用初始化函数
- C++中的inline关键字
- 的四次C++作业
- UVa 11059 Maximum Product
- C++ builder数据库连接大全
- MFC使用mscomm串口通信
- 第四次c++作业
- C语言单向链表的建立
- 第四次c++作业
- 第四次c++实验
- C++:STL标准入门汇总
- C++ STL--stack/queue 的使用方法