1174: 长整数排序(指针专题)

1174: 长整数排序(指针专题)

题目描述
长整数排序。输入n 然后输入n个位数不超过100位的大整数,输入的整数可能含有前导0。将这n个长整数排序后输出,输出不含前导0。
int greater(char *s1, char *s2)
{
若s1指向的整数大于s2指向的整数,返回一个正整数;
若s1指向的整数小于s2指向的整数,返回负整数;
若s1指向的整数等于s2指向的整数,返回0;
}
输入
输入第一行是一个正整数n(n<=10),接下来n行是n个大整数,均非负。
输出
输出n行,为n个升序排序后的大整数。
样例输入 Copy
3
012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
54213456565
113456789456231545674632132156465132123156456423132156465461321654878976464654132132156455
样例输出 Copy
54213456565
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
113456789456231545674632132156465132123156456423132156465461321654878976464654132132156455
来源/分类

#include<stdio.h>
#include<string.h>
#define N 202

int greater(char *s1,char *s2){
    int len1,len2;
    len1=strlen(s1);
    len2=strlen(s2);

    if(len1>len2) return 1;
    else if(len1<len2) return -1;
    else {
        for(int i=0;i<len1;i++){
            if(s1[i]>s2[i]) return 1;
            else if(s1[i]<s2[i]) return -1;
        }
        return 0;
    }
}

int main(){
    int n,j;
    char str[12][102],*p;
    scanf("%d ",&n);
    p=(char *)malloc(sizeof(char)*102);
    for(int i=0;i<n;i++){
        gets(str[i]);
        strcpy(p,str[i]);
        for(j=0;p[j]!='\0';j++){
            if(p[j]!='0') break;
            //全是0,只返回一个0即可
            if(p[j+1]=='\0') break;
        }
        p=&p[j];
        strcpy(str[i],p);
    }

    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(greater(str[i],str[j])==1){
                strcpy(p,str[i]);
                strcpy(str[i],str[j]);
                strcpy(str[j],p);
            }
        }
    }
    for(int i=0;i<n;i++){
        puts(str[i]);
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大整数是指超过计算机原生数据类型表示范围的整数。在处理大整数时,常常使用指针来进行操作和存储。 为了表示大整数,可以使用数组来存储每一的值。可以使用指针来访问数组中的元素,以便进行各种计算和操作。 下面是一个简单的示例代码,展示了如何使用指针来处理大整数: ```c #include <stdio.h> #include <stdlib.h> #define MAX_DIGITS 1000 // 大整数结构体 typedef struct { int digits[MAX_DIGITS]; // 存储每一的值 int length; // 数字的度 } BigInt; // 初始化大整数 void initBigInt(BigInt* num) { num->length = 1; for (int i = 0; i < MAX_DIGITS; i++) { num->digits[i] = 0; } } // 打印大整数 void printBigInt(BigInt* num) { for (int i = num->length - 1; i >= 0; i--) { printf("%d", num->digits[i]); } printf("\n"); } // 加法运算 void addBigInt(BigInt* num1, BigInt* num2, BigInt* result) { int carry = 0; // 进 for (int i = 0; i < num1->length || i < num2->length; i++) { int sum = num1->digits[i] + num2->digits[i] + carry; result->digits[i] = sum % 10; // 当前的值 carry = sum / 10; // 进值 } if (carry > 0) { result->digits[result->length++] = carry; } } int main() { BigInt num1, num2, result; initBigInt(&num1); initBigInt(&num2); initBigInt(&result); // 设置大整数的值 num1.digits[0] = 9; num1.digits[1] = 8; num1.length = 2; num2.digits[0] = 1; num2.digits[1] = 2; num2.length = 2; // 执行加法运算 addBigInt(&num1, &num2, &result); // 打印结果 printBigInt(&result); return 0; } ``` 这段代码演示了一个简单的加法运算,通过使用指针操作大整数的数组表示,可以实现对大整数的加法。当然,大整数的处理涉及到更多操作,如减法、乘法、除法等。 希望这个示例能帮助你理解如何使用指针来处理大整数。如果你有其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值