hdoj-1013-C

原题链接:hdoj1013

两个点,一个是大数,一个是九余数定理;
第一次提交用的是int,但是发现Wa,看了下discuss才发现大数这个点,然后就用了char数组。
九余数定理:某数除以9所得的余数为该数的数根(某数各个数位的数相加,若结果为两位数,继续相加,直到结果为一位数,即为数根)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    char n[10000];
    while(~scanf("%s",n) && n[0]!='0'){
        int sum=0;
        for(int i=0;i<strlen(n);i++){
            sum+=n[i]-'0';
        }
        printf("%d\n",(sum-1)%9+1);
    }
    return 0;
}

//这道题写的时候,一直没AC过,因为将sum变量的位置放的不对,汗颜。

### HDOJ 2065 C语言解题思路及代码实现 #### 题目描述 HDOJ 2065 是一道关于字符串处理的经典题目。给定一段英文文本,要求将其中的单词顺序反转并保持标点符号位置不变。 #### 解题思路 为了高效解决这个问题,可以采用双端队列(deque)来辅助处理。具体来说: - 使用两个指针分别指向当前读取的位置和待输出的位置。 - 当遇到字母时将其压入栈中暂存。 - 若碰到非字母字符,则直接输出该字符,并依次弹出栈内的所有字母直至为空[^1]。 这种方法不仅逻辑清晰简单易于理解,同时也保证了较高的执行效率。 #### 代码实现 以下是基于上述思路编写的C语言版本解决方案: ```c #include <stdio.h> #include <ctype.h> #define MAX_LEN 1000 // 定义最大长度常量 int main() { char str[MAX_LEN], stack[MAX_LEN]; int top = -1; fgets(str, sizeof(str), stdin); for(int i = 0; str[i]; ++i){ if(isalpha(str[i])){ stack[++top] = str[i]; // 字母入栈 }else{ while(top != -1){ // 输出栈内所有字母 putchar(stack[top--]); } putchar(str[i]); // 输出非字母字符 } } while(top != -1){ // 处理最后一串连续字母 putchar(stack[top--]); } return 0; } ``` 此段代码通过`fgets()`函数获取输入字符串,并利用标准库中的`isalpha()`函数判断字符是否为英文字母。对于每一个非空白字符,如果是字母则加入到临时保存区域(即stack数组),如果不是字母而是其他符号,则先打印之前累积的所有字母再打印这个特殊符号。最后还需额外检查一次堆栈里是否有剩余未被处理过的字母序列[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值