c语言一个字符串怎么做除法,[分享]C语言基础三-字符串

基本数据类型

C语言和同类型的语言相比有很多的数据类型,其中__int64的long类型是非标准类型,非标准类型的代码,是不可以移植的。从商业化角度来看,微软可以牢牢保留住使用非标准类型的用户平台。

溢出和进位的区别

溢出:针对有符号数据的描述,当数据到达最大值的时候,如果再+1数据就会溢出,有可能变成负数,恢复代价大,也有可能不能恢复。

进位:针对无符号数据的描述,当数据超过这个数据的大小时,就会产生进位,当前值还是有效的,可以通过一定的手段获得进位数据。

字符和字符串

字符串的存储和交互,一共提出了2种概念:一种是C语言风格的,在字符后面以0结尾,代表是一个字符串;另一种是Pascal风格的,一般用前面两位给定大小,后面存储大小一样的字符,形成一个字符串。

C语言风格的优点是灵活性比较高,特别是在网络通信的时候,只要不是以0结尾,那么可以传输任意的字符;缺点是如果要找第N个字符,那么要一个一个的查找。

Pascal风格的优点是长度固定,访问N个的效率高,可以以跳板的形式访问;缺点

是缺乏灵活性。

而微软提供了更加兼容的方案,前边表示类型,后边以0结尾。

字符和字符串的区别

'a'和"a"的区别:

字符a是可以访问Ascii编码的,而字符串a则是引用的字符串的首地址。

C语言中的除法规则:向0取整

在数学中有向上取整和向下取整,比如3/2=1.5,向下取整就是取不大于自己的最大整数,也就是1;向上取整就是取不小于自己的最大整数,也就是2。C语言中向0取整,使用右移符号时必须要判断商是否为负数。

取余

我们都知道%号的作用,3%2=1,-3%2=-1,结果和左操作数符号有关,左操作数是什么符号余数就是什么符号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言可以使用字符串进行长整数除法运算,具体步骤如下: 1. 将被除数和除数转换成字符串形式,即用字符数组存储; 2. 从被除数的最高位开始,依次将每一位与除数进行比较,如果当前位小于除数,则将当前位和下一位合并成一个数,继续与除数比较; 3. 如果当前位大于等于除数,则进行除法运算,将商存储起来,然后将被除数更新为当前位减去除数乘以商; 4. 重复步骤2-3,直到被除数的最低位。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <string.h> #define MAX_LEN 1000 char quotient[MAX_LEN]; // 商 char remainder[MAX_LEN]; // 余数 void div(char* dividend, char* divisor) { int len1 = strlen(dividend); int len2 = strlen(divisor); if (len1 < len2 || (len1 == len2 && strcmp(dividend, divisor) < 0)) { strcpy(quotient, "0"); strcpy(remainder, dividend); return; } char temp[MAX_LEN]; // 存储两个字符数组合并后的数 strcpy(temp, dividend); int idx = 0; // 商的当前位数 for (int i = 0; i <= len1 - len2; i++) { // 将当前位和下一位合并成一个数 if (i == 0) { strncpy(temp, dividend, len2); } else { temp[0] = dividend[i + len2 - 1]; temp[1] = '\0'; } // 比较大小 while (strcmp(temp, divisor) >= 0) { // 进行除法运算 int q = 0; while (strcmp(temp, divisor) >= 0) { q++; char t[MAX_LEN]; strcpy(t, divisor); for (int j = 1; j < q; j++) { strcat(t, divisor); } strcpy(remainder, temp); strcpy(temp, t); strcat(remainder, temp); } quotient[idx++] = q + '0'; // 更新被除数 int l = strlen(temp); strncpy(temp, remainder + l - 1, 1); temp[1] = '\0'; } } quotient[idx] = '\0'; strcpy(remainder, temp); } int main() { char a[] = "123456789012345678901234567890"; char b[] = "123456789"; div(a, b); printf("quotient: %s\nremainder: %s\n", quotient, remainder); return 0; } ``` 需要注意的是,该代码只能处理非负整数的除法运算,如果需要处理负数,则需要额外处理符号位。同时,由于字符串形式的除法运算相比于直接计算效率较低,因此在实际使用应该尽量避免使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值