C语言,大数除法,不支持小数
来源:互联网 发布:怎么一键复制淘宝店铺 编辑:程序博客网 时间:2024/04/30 16:00
#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[N];
char number4[N];
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[N];
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[N];
char number2[N];
char number3[N];
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[N];
char number4[N];
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[N];
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[N];
char number2[N];
char number3[N];
Input(number1, number2, N);
Devide(number1, number2, number3);
Clear_Zero(number3);
printf("%s", number3);
system("pause");
}
0 0
- C语言,大数除法,不支持小数
- 大数除法 C语言
- C语言中除法怎么取得小数
- C语言中除法怎么取得小数
- C语言超大数除法,支持小数
- 大数除法模板(c语言)
- 在C语言中除法运算为什么没有小数部分?
- C语言大数运算-乘除法篇
- C语言精度计算——大数乘小数
- HDU 1023 大数与int小数 乘法 除法!!!!!!!!!!!!!
- lightoj1214 - Large Division【大数整除小数判定 模拟除法】
- 一个支持大数计算的类型 仅不支持除法
- c语言移位除法
- C语言 高精度除法
- 大数/小数,大数%小数
- 用C语言写的超长的大数乘法,不支持负数,新手上路请多指点
- 大数 除法
- 大数除法
- 学习C语言必看文章
- 字符流写数据
- [python]join函数操作字符串
- 转换流
- 理解LSTM网络及其流程Understanding LSTM and its diagrams
- C语言,大数除法,不支持小数
- 字符流读取数据
- Websocket之协议简单介绍
- Concurrent包中的线程池
- Android 标题栏添加常驻图标 Notification
- 结构体赋值(scanf)
- 字符流中Close()和flush()的区别
- 用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 (zz)
- 玩玩Xamarin Evolve 2016带来的新特性(一)-iOS Simulator(for Windows)