div_cal1.c

来自「在需要计算的设计中」· C语言 代码 · 共 56 行

C
56
字号
#include <intrins.h>
#include <string.h>
#include <absacc.h>
#include "reg52.h"

#define uchar	unsigned char
#define uint	unsigned int
#define ulong	unsigned long

/*--------------------------------------------------------------
	超长除法(6字节(高位在前,低位在后)/(100的n次方)==4字节)(四舍五入)
	入口参数:
		buf == 被除数
		num == 除num个10
	出口参数:
		== buf/(100的n次方);
--------------------------------------------------------------*/
ulong odiv(uchar *buf,uchar num)
{
	uint dividend;
	uchar residue,i;
	uchar xdata buf1[6];
	ulong result;

	i=0;
	do
	{
		buf1[i]=buf[i];
		i++;
	}while(i!=6);

	do
	{
		*((uchar *)(&dividend)+0)=0;	//被除数高位清0
		*((uchar *)(&dividend)+1)=buf1[0];
		buf1[0]=dividend/100;
		i=1;
		do
		{
			residue=dividend%100;
			*((uchar *)(&dividend)+0)=residue;	//余数作为下次高位
			*((uchar *)(&dividend)+1)=buf1[i];
			buf1[i]=dividend/100;
			i++;
		}while(i!=6);
	}while(--num);
	residue = dividend%100;
	*((uchar *)(&result)+3)=buf1[5];
	*((uchar *)(&result)+2)=buf1[4];
	*((uchar *)(&result)+1)=buf1[3];
	*((uchar *)(&result)+0)=buf1[2];

	if(residue>49) result++;
	return(result);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?